mit C++ DLLs schreiben, die man auch mit Pascal lesen kann
-
alles klar ich denk daran wird es liegen, ich kenn mich auch nicht mit pascal aus. ich programmier die dll ja für einen anderen programmierer...
danke für die hilfe
-
also es klappt immernoch nicht, ich habe jetzt versucht bei mir konventionen zu verwenden (PASCAL und __stdcall) aber Pascal zeigt immer einen undokumentoerten fehler an. dies geschieht schon beim laden der dll.
andersrum kommen auch probleme auf, wenn eine dll von Pascal zu C++ geschrieben wird. Diese dll kann ich dann nicht laden, er zeigt mir an, dass die dll keine Windows-Datei ist. hat da jemand eine idee wie man das problem lösen kann?
-
Welche Compiler?! Ist das denn so schwer, das dazuzuschreiben?
Hast du extern "C" verwendet?
-
also ich habe extern "C" verwendet, ich weiß jetzt auch woran es liegt, die dlls die ich mit C++ schreibe sind 32 Bit und Pascal kann bislang nur 16 Bit Dlls lesen. Ich benutze VC++ 6.0. weiß leider nicht, welchen compieler der pascal programmierer verwendet...
weiß da jemand, was zu tun ist?
-
Ja, Compiler wechseln (zumindest der Pascal-Programmierer sollte das tun).
-
denke mal das es so gehen wird:
// test.cpp #include <windows.h> __declspec(dllexport) void WINAPI ShowMessageBox() { MessageBox(NULL, "ShowMessageBox", "", MB_OK); }test.def
LIBRARY test EXPORTS ShowMessageBox @1
-
vielleicht solltest du Dev-Pascal benutzen:
-
Deklarier mal als stdcall. C DLLs in Delphi zu benutzen macht keine Probleme, geht ja mit den APIs auch.

-
ich werd jetzt mal versuchen, den compiler unter pascal zu verändern...ich denke daran könnte es liegen. ich poste dann wenn es geklappt hat.
Mit __stdcall hab ich schon probiert, aber es hat nicht funktioniert...
-
In der DLL die aufrufkonvention __pascal verwenden.
In Pascal musst du die Funktion mit LoadLibrary laden, wie in C mit WinAPI.
Dann muss der Funktionszeiger und mit stdcall deklariert werden.program DLL; uses Windows, Messages, SysUtils; var Lib : HMODULE; Test : function(i : word) : integer; stdcall; begin Lib := LoadLibrary('Test.dll'); Test := GetProcAddress(Lib, 'Test'); Test(4); FreeLibrary(Lib); readln; end.Bei mir funktioniert's so