Ik heb een DLL die ik wil gebruiken vanuit een C-programma. De ontwikkelomgeving is Cygwin.
De DLL is gemaakt in Delphi en is een in-process COM-object. In Delphi 7 kun je een bijbehorend bronbestand genereren waarin de interfaces, methoden en enumeraties staan. Dit wil ik dus ook doen voor Cygwin.
Ik heb het onderstaande al geprobeerd, maar dat werkt volgens mij alleen met DLL's die alle beschikbare functies exporteren. Helaas retourneert GetProcAddress gewoon NULL wat er op wijst dat de functie niet gevonden kan worden ofwel de functies worden niet geëxporteerd.
Ik google me scheel maar kan niets vinden over het linken met een COM-object. Weten jullie mischien hoe het moet?
De DLL is gemaakt in Delphi en is een in-process COM-object. In Delphi 7 kun je een bijbehorend bronbestand genereren waarin de interfaces, methoden en enumeraties staan. Dit wil ik dus ook doen voor Cygwin.
Ik heb het onderstaande al geprobeerd, maar dat werkt volgens mij alleen met DLL's die alle beschikbare functies exporteren. Helaas retourneert GetProcAddress gewoon NULL wat er op wijst dat de functie niet gevonden kan worden ofwel de functies worden niet geëxporteerd.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <windows.h> #include <stdio.h> typedef void (__cdecl *_Logout)(); _Logout enabled_Logout = NULL; void enable_foo(void) { void *dll = LoadLibrary("foo.dll"); if (dll == NULL) { fprintf(stderr, "Failed to load foo.dll"); exit(1); } enabled_Logout = (_Logout) GetProcAddress(dll, "Logout"); printf("%p", GetProcAddress(dll, "Logout")); } int main(void) { printf("Hello world!\n"); enable_foo(); printf("%p", enabled_Logout); } |
Ik google me scheel maar kan niets vinden over het linken met een COM-object. Weten jullie mischien hoe het moet?
"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand