Seite 1 von 2

DLL schreiben

Verfasst: 22.12.2009 19:07
von Marc-21
Hi möchte gerne eine DLL schreiben als plugin für ein anders programm, das programm sucht die dll nach diesen dll befehl On_Start(HINSTANCE MDInstance, HWND MDWnd, BOOL Log_Set, int DLL_ID, char *My_Hot_Key, char *Api_Version, int *Keep_me_running).

In c++ wird das so gemacht

Code: Alles auswählen

extern "C" __declspec (dllexport) void On_Start(HINSTANCE MDInstance, HWND MDWnd, BOOL Log_Set, int DLL_ID, char *My_Hot_Key, 
char *Api_Version, int *Keep_me_running)


wie kann ich das auf Purebasic um münzen möchte nicht in C++ schreiben.

Danke .

benutze PB 4.20

Re: DLL schreiben

Verfasst: 22.12.2009 19:11
von Kaeru Gaman
update erstmal dein PureBasic, da hat sich doch was getan in den letzten zwei Jahren.
es wird kaum jemand noch eine 4.2 installiert haben.

Re: DLL schreiben

Verfasst: 22.12.2009 19:20
von ts-soft
Das Grundgerüst Deiner Funktion sieht so aus:

Code: Alles auswählen

ProcedureCDLL On_Start(MDInstance.i, MDWnd.i, Log_Set.i, DLL_ID.i, My_HotKey.s, Api_Version.s, *Keep_me_running)

EndProcedure
Unter PB 4.20 mußte die Integer (.i) durch Long (.l) ersetzen.

Aber ich glaube kaum das Dich das weiterbringt :wink:

Gruß
Thomas

Re: DLL schreiben

Verfasst: 22.12.2009 20:16
von Marc-21
Wieso?

Re: DLL schreiben

Verfasst: 22.12.2009 21:18
von Thorium
Marc-21 hat geschrieben:Wieso?
Weils in 4.20 noch kein .i gibt. :wink:

Re: DLL schreiben

Verfasst: 23.12.2009 16:27
von mk-soft
Muss nicht ".i" sein. DLL´s gingen mit der PB4.20 auch

Code: Alles auswählen

ProcedureCDLL On_Start(MDInstance.l, MDWnd.l, Log_Set.l, DLL_ID.l, My_HotKey.s, Api_Version.s, *Keep_me_running)

EndProcedure
Must mal aus probieren...

Re: DLL schreiben

Verfasst: 23.12.2009 17:27
von ts-soft
ts-soft hat geschrieben: Unter PB 4.20 mußte die Integer (.i) durch Long (.l) ersetzen.
Dieser Hinweis war doch eindeutig, oder etwa nicht?

Re: DLL schreiben

Verfasst: 25.12.2009 21:12
von Marc-21
Hi

so geht es

Code: Alles auswählen

ProcedureCDLL On_Start(MDInstance, MDWnd, Log_Set, DLL_ID, My_HotKey, Api_Version, *Keep_me_running)

EndProcedure
aber hier kommt gleich das nächtest problem

Code: Alles auswählen

ProcedureCDLL On_Send_Dll_ID_Name(*Name)
*Name = AllocateMemory(5000)
PokeS(*Name,"EMU")
a$ = PeekS(*Name)
EndProcedure
Wenn ich das den auf rufe : On_Send_Dll_ID_Name(*Name)

und die dll im anderen Programm auf rufe wird der name nicht angezeigt.
mache ich was falscH?

Re: DLL schreiben

Verfasst: 25.12.2009 21:16
von ts-soft
In welchem Format erwartet denn das andere Programm den String?

Kannst ja mal:

Code: Alles auswählen

ProcedureCDLL On_Send_Dll_ID_Name(*Name)
  *Name = SysAllocString_("EMU")
EndProcedure 
probieren

Re: DLL schreiben

Verfasst: 25.12.2009 21:42
von Marc-21
danke geht leider auch nicht.
unter C++ wird es so gemacht

#define Emu "Emu"

DLL void On_Send_Dll_ID_Name(char *Name)
{
strcpy(Name,Emu);
}