20-12-2017, Saat: 14:09
(Son Düzenleme: 22-12-2017, Saat: 11:25, Düzenleyen: erkankurtaga.)
function Ar_Dll_Function(const TerminalNo: PAnsiChar; const Description: PAnsiChar):Integer; function Ar_Dll_Function(const TerminalNo: PAnsiChar; const Description: PAnsiChar):Integer; var MyFunct : function(const TerminalNo: PAnsiChar; const Description: PAnsiChar):Integer;cdecl; begin Result := 0; @MyFunct:=GetProcAddress(HInst,'ar_dll_function'); if Assigned(MyFunct) then Result := MyFunct(TerminalNo, Description); end;şeklinde tanımlanmış örnek bir dll fonksiyonunda iki adet PAnsiChar parametre mevcut. Bu parametrelere string i PAnsiChara çevirerek değerleri gönderiyorum.
Çevirici fonksiyonum:
function SP(const s:string): PAnsiChar; var UTF8Str: RawByteString; begin Result := #0; SetCodePage(UTF8Str, 0, False); UTF8Str := UTF8Encode(s); Result := PAnsiChar(AnsiString(UTF8Str)); end;
İki fonksiyonun birbiri ile kullanımı:
result := Ar_Dll_Function(SP(dTermNo),SP(descr));
Debugta Dll fonksiyonun çalıştırılmasına kadar geldiğimde ilk parametrede problem yok. Ama ikinci parametre ya ilk parametre ile aynı oluyor ya da ikinci parametreye fonksiyon ismini yazıyor.
//örnek olarak parametreler : dtermno:='AT0000058863'; descr:='NAKİT'; //Fonksiyona geldiğinde parametreler TerminalNo:='AT0000058863'; const Description:='AT0000058863'; //ya da TerminalNo:='AT0000058863'; const Description:='ar_dll_function'; //oluyor
Yukarıda verdiğim örneklerle problemimi anlatmaya çalıştım. Çözümü ile alakalı yardımlarınız bekliyorum.
İyi çalışmalar, kolay gelsin. Teşekkürler...