Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DLL in C mit dem GCC (https://www.delphipraxis.net/75228-dll-c-mit-dem-gcc.html)

Luckie 16. Aug 2006 09:49


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:
#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;
}
FirstDLL.h:
Code:
#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);
Und der Aufruf in Delphi:
Delphi-Quellcode:
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;
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?

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.

turboPASCAL 16. Aug 2006 10:36

Re: DLL in C mit dem GCC
 
Keine Ahnung was du da machst. ;)
Du kannst aber event. dort was für dich herrauslesen: http://in4k.untergrund.net/index.php...Delphi_and_GCC

Ggf. noch stdcall; oder cdecl noch angeben ? :gruebel:

Luckie 16. Aug 2006 10:42

Re: DLL in C mit dem GCC
 
Hm, nicht wirklich.

MagicAndre1981 16. Aug 2006 10:55

Re: DLL in C mit dem GCC
 
das mit dem Java-Ding ist unwichtig, daran liegt es nicht.

hat Mattis Link geholfen?

Luckie 16. Aug 2006 10:58

Re: DLL in C mit dem GCC
 
Nur in sofern, dass ich wohl keine DLLMain brauche. Ich abe jetzt nur:
Code:
#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;
}
Das klappt aber trotzdem nicht. :gruebel:

Flocke 16. Aug 2006 11:20

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 mingw gegen die MSVCRT.DLL zu compilieren. Das ist normalerweise etwas "windows-kompatibler". Ggf. geht das auch mit deiner GCC-Version schon.

Luckie 16. Aug 2006 11:38

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?

Luckie 16. Aug 2006 11:56

Re: DLL in C mit dem GCC
 
Neue Informationen.

Dieser Code:
Code:
// 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;
}
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.

Luckie 4. Sep 2006 06:15

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?

Flocke 4. Sep 2006 07:09

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 21:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz