Unter Delphi 5 läuft alles einwandfrei.
Unter Delphi XE4 bekomme ich immer dieses Ergebnis
⸵3捥獤ⵡ汰楡䡓㍁㐸
hat keiner einer Idee?
Da steht doch "DLL erfolgreich geladen" oder kannst du kein chinesisch? :-) :-)
Ich habe die Vermutung du lädst hier zuvor irgend einen asiatischen Sprachtreiber hoch. Kann es sein, dass vielleicht im Compiler irgendwo noch etwas mit asiatischen Schriften eingestellt ist?
Ich kenne mich mit XE4 nicht aus. Mein Programm ist in Delphi 5 programmiert und jetzt ich bin zu Lazarus gewechselt, da habe ich noch echtes Pascal im Hintergrund und kein .Net Framework.
Hallo Jürgen,
du scheinst hier dynamisches und statisches Laden zu vermischen.
Wenn du die Funktion so deklarierst lädst du die DLL statisch und kannst dir somit das LoadLibrary sparen.
function worm_getVersion : PChar; stdcall; external 'WormAPI.dll';
Schau dir mal diese Seite an, vielleicht hilft das:
https://www.swissdelphicenter.ch/de/showcode.php?id=950
Ich binde die DLL dynamisch ein.
Hier die Deklaration als Beispiel:
type TWorm_getVersion = function: PAnsiChar;stdcall; var worm_getVersion: TWorm_getVersion; implementation const StdCallDLL = 'WormAPI.dll'; var DLLHandle: THandle; function InitSwissbitDll: Boolean; begin if DLLHandle <> 0 then exit(true); DLLHandle := LoadLibrary(StdCallDLL); Result := DLLHandle <> 0; @worm_getVersion := GetProcAddress(DLLHandle, 'worm_getVersion'); end;
Ich hoffe das hilft.
Dennis
Hallo
die Funktion LoadLibrary Liefert auf manche Windowsrechnern (Windows 10 64 bit), die 0 zurück.
auch das Testprogramm von Swissbit zeigt die Meldung "das angegebene Modul 'WorAPI.dll' wurde nicht gefunden ", obwohl die Datei existiert.
weißt jemand, was auf diesen Rechner fehlt?
Tippfehler WormAPI.dll
Hallo,
bei uns hat es geholfen, die Visual C++ Redistributable Packages zu installieren.
Die findest du hier:
https://support.microsoft.com/de-de/help/2977003/the-latest-supported-visual-c-downloads
unter dem Bereich "Visual Studio 2015, 2017 und 2019" und dann abhängig davon ob das Programm 32-bit und 64-bit hat.
Dennis
Hallo zusammen
Ich bin dara das TSE Modul in meine Delphi Anwendung zu entegrieren, habe aber Probleme beim Aufruf der DLL Funktion "worm_transaction_start". Bekomme immer die Antwort "WORM_ERROR_INVALID_PARAMETER".
Wäre es möglich, dass mir jemand die Signatur von dieser Funktion geben könnte sowie einem Codefragment, aus welchem ich sehen wie die Funktion aus Delphi heraus aufgerufen werden muss (speziell die Parameter)?
Danke vielmals
bei uns hat es geholfen, die Visual C++ Redistributable Packages zu installieren
Vielen Dank
der DLL Funktion "worm_transaction_start"
versuche es damit
function worm_transaction_start(context:WormContext; clientId:PAnsiChar;
processData:PAnsiChar; processDataLength:worm_uint;
processType:PAnsiChar; response:WormTransactionResponse):WormError;
bei der
WormContext = PInt32;
WormError = WORD;
WormTransactionResponse = PInt32;
worm_uint = UInt64
Die C++ Redistributable Packages sind bei mir installiert. Da ich die Fehlermeldung erhalte "ungültige Parameter", gehe ich davon aus, dass bei meiner Parameterübergabe an die Funktion was falsch ist.
Wie sieht bei die Definition der Funktion "worm_transaction_start" aus und wie rufst du diese aus deinem Delphi Code heraus auf?
DLL Funktion
function worm_transaction_start(context: PWormContext; const clientId: PAnsiChar; const processData: PAnsiChar; processDataLength: worm_uint; const processType: PAnsiChar; response: PWormTransactionResponse): WormError; stdcall;
external LIBWORMAPI name _PU + 'worm_transaction_start';
Funktionsaufruf aus meinem Interface:
Error := worm_transaction_start(Context, PAnsiChar(Utf8String(CLIENT_ID)), PAnsiChar(Utf8String(Data)), Length(Data), PAnsiChar(Utf8String('Buchung')), Response.Ptr);
Datentypen:
Context : IntPtr
worm_uint: UInt64
WormTransactionResponse: IntPtr
Ich verwende in den anderen DLL Funktionen ebenfalls diese Typen und dort funktioniert es.
ich benutze den Aufruf "cdecl" statt "stdcal"
hab's eben bei mir umgestellt - funktioniert auch nicht. welche version des TSE API verwendet du?
könntest du mir allenfalls noch zeigen wie du bei dir die funktion aus deinem code heraus aufrufst (just in case)?
Jürgen Bukoitz
Hallo,
da ich doch erst mal "klein" anfangen muss und meine sdcard noch nicht da
ist versuche ich dll Version auszulesen. Der untere Code gibt mir aber
nur Hieroglyphen zurück, es scheint was mit der typ Umwandlung nicht zu stimmen. Sieht einer den Fehler?
private
{ Private-Deklarationen }
procedure dllLaden;
procedure dllEntladen;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
function worm_getVersion : PChar; stdcall; external 'WormAPI.dll';
implementation
{$R *.dfm}
var
hDLL : HMODULE;
procedure TForm1.dllLaden;
var
v,
s : String;
i : integer;
begin
hDLL := LoadLibrary('WormAPI.dll');
if hDLL <> 0 then //DLL erfgolgreich geladen?
begin //Wenn 0 dann laden fehlgeschlagen!
v := String(worm_getVersion);
Memo1.Text := v;
Form1.StatusBar1.Panels[1].Text := 'DLL erfolgreich geladen';
end
else
begin
s := SysErrorMessage(GetLastError());
ShowMessage('DLL fehlgeschlagen!' + s);
Form1.StatusBar1.Panels[1].Text := 'Fehler! DLL nicht geladen';
end;
end;
procedure TForm1.DLLEntladen;
begin
if hDLL <> 0 then
begin
FreeLibrary(hDLL);
hDLL := 0;
Form1.StatusBar1.Panels[1].Text := 'DLL entladen';
end
else
begin
Form1.StatusBar1.Panels[1].Text := 'Fehler! DLL nicht entladen';
end;
end;