[Delphi -> C++] Zamiana struktur w DLL

0

Witam serdecznie.

Mam taki kod w Delphi:

  TDLLTKAInfo = record
    typ:TDLLTKAType;   //DLL type
    name,author:ShortString; //name and author
    ver:byte;          //0.1 = 1; 0.2 = 2; 0.9 = 9; 1.0 = 10; 2.3 = 23; 13.0 = 130 etc...
  end;

I potem funkcję:

   function DLLInfo:TDLLTKAInfo; stdcall;
   var
   info:TDLLTKAInfo;
   begin
   //Here you need to type your DLL's info:
     info.typ     :=  TDTCosTam;
     info.name    :=  'xyz';
     info.author  :=  'Jakub Król';
     info.ver     :=  11;

     result:=info;
   end;

Wczytuję z DLLki w programie to tak:

function DYNAMIC_DLLInfo(sDLL, sFunc : string; const DLLhandle:THandle=0 )  : TDLLTKAInfo;
type
  TInfo_Func = function ():TDLLTKAInfo; stdcall;
var
  Info_Func : TInfo_Func;
  hDll       : THandle;
  FuncPtr    : TFarProc;
  sMsg       : string;
begin
if DLLhandle>32 then
hDll:=DLLhandle else
  hDll   := LoadLibrary(
              PChar( sDLL ) );
  if(hDll > 32)then
  begin
    FuncPtr :=
      GetProcAddress(
        hDll, PChar( sFunc ) );
    @Info_Func := FuncPtr;
    if(nil <> @Info_Func)then
    begin
      Result := Info_Func;
    end else
    begin
      DLLEntryBlad(sFunc);
    end;
    if DLLhandle<32 then FreeLibrary( hDll );
  end else
  begin
      DLLFileBlad(sDLL);
  end;
end;

Próbujemy z kolega różnych sztuczek, aby przepisać tą DLLke na C++, ale jakoś nam nie idzie...
Przesyła dobrze jedynie to typ, reszta puste... ;/

Jakieś wskazówki?</delphi>

0

w pliku nagłówkowym:

	
        enum TDLLTKAType
        {
            TDTVoiceIn,              // Voice to text driver
            TDTVoiceOut,             // Text to voice
            TDTAppControl,           // Only work mode
            TDTDataBase,             // AI database //NOT USED ANYMORE
            TDTArtificalIntelligence,// AI layer
            TDTTemplate              // Just template - cannot be used anywahere
        };

        struct TDLLTKAInfo
        {
            TDLLTKAType typ;   //DLL type
            string name;       //name
            string author;     //author
            char ver;          //0.1 = 1; 0.2 = 2; 0.9 = 9; 1.0 = 10; 2.3 = 23; 13.0 = 130 etc...
        };

        __declspec(dllexport) TDLLTKAInfo __stdcall DLLInfo();

cpp:

    TDLLTKAInfo __stdcall DLLInfo()
    {
            TDLLTKAInfo info;
			info.typ = TDTDataBase;
            info.name = "test";
            info.author = "blabla";
            info.ver = 10;
            return info;
    }
</cpp>
0

Typ który jest dobrze przesyłany to:

TDLLTKAType typ; //DLL type

reszta nie działa.

0

bo przesyłanie shortstringów przez DLL to w ogóle zły pomysł. zmień to na pchar (czyli char*) albo statyczną tablicę znaków o predefiniowanej wielkości.

0

@Azarien - no właśnie problem jest takiej natury, że żaden z tych pomysłów po prostu nie działa... Nawet głupi Char sie nie chce wysłać...
Nie wiem, czy problemem może być to, że to Delphi 2009 i Char = WideChar, String = WideString, PChar = PWideChar itd?

0

aaa. no to używaj ansichar, pansichar w Delphi, albo na odwrót - wchar_t, *wchar_t w C++.

0

@Azarien - no wlasnie zaczyna to dzialac :) Dzieki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1