Einzelnen Beitrag anzeigen

wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#1

Call einer DLL von einem Delphi Prg

  Alt 11. Apr 2017, 20:50
Hallo Leute,
also ich hab die DLL dyn. gelanden und die SUMME von 1+2+3 klappt auch mit Rückgabewert int.
Doch wenn ich char* zurückgeben will kommt nur nix.

Kann mir da wer sagen, wieso? Ich dachte bei dyn. laden der dll braucht man auf den MemMGR nicht achten?

DANKE für jeden TIPP.

Habe nun das folgende probiert:
Delphi-Quellcode:
procedure TForm2.LadeDLL(Sender: TObject);
begin
  hmod := LoadLibrary('QMC_DLL.dll');
  if (hmod <> 0) then begin
    calcmain := GetProcAddress(hmod, 'calcmain');
    if (@calcmain <> nil) then begin
      ShowMessage('calmain geladen');
    end
    else
      ShowMessage('GetProcAddress failed');
    getttterms := GetProcAddress(hmod, 'getttterms');
    if (@calcmain <> nil) then begin
      ShowMessage('getttterms geladen');
    end
    else
      ShowMessage('GetProcAddress failed');
    calcsum := GetProcAddress(hmod, 'calcsum');
    if (@calcsum <> nil) then begin
      ShowMessage(Format('Calcsum geladen: UND TEST: SUM(1,2,3) = %d',[calcsum(1,2,3)]));
    end
    else
      ShowMessage('GetProcAddress failed');
    dummycdecl := GetProcAddress(hmod, 'dummycdecl');
    if (@dummycdecl <> nil) then begin
      ShowMessage(Format('dummycdecl geladen: UND Return; = %c',[dummycdecl('3')]));
    end
    else
      ShowMessage('GetProcAddress failed');
    dummystdcall := GetProcAddress(hmod, 'dummystdcall');
    if (@dummystdcall <> nil) then begin
      ShowMessage(Format('dummystdcall geladen: UND Return; = %c',[dummystdcall('3')]));
    end
    else
      ShowMessage('GetProcAddress failed');
      
      
  end
  else
    ShowMessage('LoadLibrary Failed!');
end;
die ersten beiden werden geladen bzw die Summe angezeigt. aber die letzten beiden klappen nicht
mehr - da kommt GetProcAddress failed'.

Mein DLL:

Code:
char __declspec(dllexport) __stdcall dummystdcalll(char* inpvec)
{
return inpvec[0]; //resultbuff;

}

char __declspec(dllexport) __cdecl dummycdecl(char* inpvec)
{
return inpvec[0]; //resultbuff;

}
Wer weiß Rat?
DANKE
Angehängte Dateien
Dateityp: zip dll_QMC.zip (67,4 KB, 5x aufgerufen)

Geändert von wschrabi (11. Apr 2017 um 21:27 Uhr)
  Mit Zitat antworten Zitat