2016-07-07 10 views
2

Ich bin ein Entwickler-Student und ich schreibe gerade meine Bachelor-Thesis. Seit ein paar Tagen verzweifle ich an einem Problem beim Aufruf einer DLL von Powerbuilder Classic 12.5.DLL-Call von PowerBuilder

Ja, es gibt Diskussionen darüber, aber ich habe wirklich viel versucht, und nichts funktioniert ... und meine Kollegen konnten mir auch nicht helfen.

Ich habe eine DLL, in C++ programmiert, die ich anrufen möchte. Der Leiter Funktion ist

__declspec(dllexport) bool __stdcall registerPbControl(unsigned long hctl); 

In Powerbuilder, erklärte ich eine globale Externe Funktion:

FUNCTION boolean registerControl (ulong hctl) LIBRARY "C:\Users\...\GateWayFinal.dll" ALIAS FOR "registerPbControl;ansi" 

und der Befehl des Button in Powerbuilder:

boolean lb 
     lb = registerControl (handle (mle_1)) 

Wenn ich die Taste drücken, Ich erhalte diesen Fehler:

PowerBuilder application execution error: Application Terminated. Error: Bad runtime Function reference at line ...

Was habe ich falsch gemacht?

+0

Nie mit PowerBuilder gearbeitet; Aber könnte es eine [Aufrufkonvention] (https://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx) Nichtübereinstimmung sein? – CristiFati

Antwort

2

Ich bin kein C++ Experte, aber ich deklariere immer Funktionen als WINAPI. Ich denke, das ist anders als Stdcall, aber ich erinnere mich im Moment nicht.

Der; ansi-Teil wird nur benötigt, wenn ein String übergeben wird, und die Funktion erwartet es ansi anstelle von Unicode.

Verwenden Sie nicht den vollständigen Dateipfad in der Deklaration.

+0

Dieser. Sie müssen WINAPI verwenden. –

1

Es ist wahrscheinlich der Name, den Sie als Alias ​​verpassen. setzen auch die DLL in den Ordner, in dem das Projekt Powerbuilder ist und dann einfach Zustand ... BIBLIOTHEK „GateWayFinal.dll“ ...

Haben Sie versucht, die C++ Projekt zu erstellen, wie hier beschrieben: http://www.rgagnon.com/pbdetails/pb-0123.html (vor allem der Teil mit die Karte und der verstümmelte Name)

Verwandte Themen