![]() |
DLL in C mit dem GCC
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche gerade eine DLL mit dem GCC zu schreiben und sie in einem Delphi Programm zu verwenden:
FirstDLL.c:
Code:
FirstDLL.h:
#include <windows.h>
#include "FirstDLL.h" int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { return 1; } EXPORT int add(int a,int b) { return a+b; }
Code:
Und der Aufruf in Delphi:
#ifndef FIRSTDLL_H_
#define FIRSTDLL_H_ #endif /*FIRSTDLL_H_*/ #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT int add(int,int);
Delphi-Quellcode:
Wen ich jetzt aber auf den Button klicke bleibt das Programm bei LoadLibrary einfach hängen und reagiert nicht mehr. Was mache ich da falsch?
type
TAdd = function(a, b: Integer): Integer; procedure TForm1.Button1Click(Sender: TObject); var hLib: THandle; s: String; begin s := IncludeTrailingBackSlash(ExtractFilePath(ParamStr(0)))+ 'FirstDLL.dll'; hLib := LoadLibrary(PChar(s)); if hLib <> 0 then begin FreeLibrary(hLib); end else ShowMessage(SysErrorMessage(GetLastError)); end; Ich habe mal die DLL mit dem DeopendencyWalker geöffnet. ScreenShot im Anhang. Irgendwie will er eine MSJava.dll einbinden, aber die habe ich auf meinem ganzen System nicht gefunden. |
Re: DLL in C mit dem GCC
Keine Ahnung was du da machst. ;)
Du kannst aber event. dort was für dich herrauslesen: ![]() Ggf. noch stdcall; oder cdecl noch angeben ? :gruebel: |
Re: DLL in C mit dem GCC
Hm, nicht wirklich.
|
Re: DLL in C mit dem GCC
das mit dem Java-Ding ist unwichtig, daran liegt es nicht.
hat Mattis Link geholfen? |
Re: DLL in C mit dem GCC
Nur in sofern, dass ich wohl keine DLLMain brauche. Ich abe jetzt nur:
Code:
Das klappt aber trotzdem nicht. :gruebel:
#include <windows.h>
//#include "FirstDLL.h" #define EXPORT __declspec(dllexport) /*int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { return 1; }*/ EXPORT int add(int a,int b) { return a+b; } |
Re: DLL in C mit dem GCC
Nur so eine Idee: kann es sein, dass die Anwendung die Cygwin.dll zuerst laden muss? Also ehe eine DLL die dann ebenfalls benutzen kann?
Probiere mal, mit ![]() |
Re: DLL in C mit dem GCC
Ja, also diese Cygwin.dll DLL musste ich auch bei normalen Exe-Programmen immer in das Exe Verzeichnis legen, damit es funktioniert. Die wollte ich sowieso iregndwie los werden. Die Cygwin.dll habe ich dann auch in das DLL-Verzeichnis gelegt, von wo aus ich die DLL lade, das hat aber auch nicht geholfen.
Wie compiliere ich gegen die MSVCRT.DLL mit dem GCC? Wo muss ich da bei Eclipse was einstellen? |
Re: DLL in C mit dem GCC
Neue Informationen.
Dieser Code:
Code:
Mit dem VC2005 kompiliert funktioniert. Ich müsste es nur schaffen das name mangling beim VC zu deaktivieren. Aber das ist ein anderes Problem. Es scheint also mit dem zusammenzuhängen, was Flocke vermutet.
// FirstDLL.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
// #include "stdafx.h" #include "FirstDLL.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } EXPORT int add(int a,int b) { return a+b; } |
Re: DLL in C mit dem GCC
So, in zwei Stunden muss ich mich wohl wieder mit dem Problem auseinandersetzen. Es muss doch eine Möglichkeit geben mit dem GCC und Eclipse eine C-DLL zu schreiben, die man auch laden kann. Kann mir eventuell mal jemand eine C-DLL mit dem GCC geschrieben geben, die ich testen kann?
|
Re: DLL in C mit dem GCC
Wie ich oben schon schrieb, habe ich hier auf einem anderen Rechner MINGW installiert, das in seiner Standardkonfiguration (so wie hier installiert) gegen die MSVCRT.DLL linkt.
Die neueren Versionen von CYGWIN / MINGW können so weit ich weiß beides, ich habe es aber noch nicht ausprobiert. Es müsste über einen Compiler-Switch einstellbar sein. Leider habe ich heute nicht die Zeit, dir da ausführlicher zu helfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz