Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
PAnsiChar ile başım dertte (Çözüldü)
#1
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...
Cevapla
#2
Bu kısmı:
result := Ar_Dll_Function(SP(dTermNo),SP(descr));

Şu şekilde dener misiniz:
var
  p1, p2: PAnsiChar;
begin
  p1 := SP(dTermNo);
  p2 := SP(descr);
 result := Ar_Dll_Function(p1, p2);
 //...

Bir de SP fonksiyonuna gerek yok gibi gözüküyor. Onun yerine direk
p1 := PAnsiChar(AnsiString(dTermNo));
şeklinde kullanabilirsiniz.
There's no place like 127.0.0.1
WWW
Cevapla
#3
(20-12-2017, Saat: 17:35)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu kısmı:
result := Ar_Dll_Function(SP(dTermNo),SP(descr));

Şu şekilde dener misiniz:
var
  p1, p2: PAnsiChar;
begin
  p1 := SP(dTermNo);
  p2 := SP(descr);
 result := Ar_Dll_Function(p1, p2);
 //...

Bir de SP fonksiyonuna gerek yok gibi gözüküyor. Onun yerine direk
[ars=delphi]p1 := PAnsiChar(AnsiString(dTermNo));
[/ars]
şeklinde kullanabilirsiniz.
 
İlginiz için teşekkürler. Dediğinizi uygulamıştım. Onda da sonuca ulaşamadım. Ama AnsiString yerine UTF8String ile sorunumu çözdüm.

p1 := PAnsiChar(UTF8String(dTermNo));
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Exclamation [ÇÖZÜLDÜ] Delphi EXE Resource TR Dil Sorunsalı mrmarman 6 179 12-07-2018, Saat: 11:09
Son Yorum: mrmarman
  [ÇÖZÜLDÜ]-Tip Dönüşümü - [TXSDecimal > Float ) hi_selamlar 6 171 02-07-2018, Saat: 12:19
Son Yorum: hi_selamlar
  [ÇÖZÜLDÜ]-n11.com Api Bağlantısı hi_selamlar 3 161 29-06-2018, Saat: 14:46
Son Yorum: hi_selamlar
  [ÇÖZÜLDÜ]-Başka Uygulamadaki MDIChild Form Handle Alma hi_selamlar 9 221 29-06-2018, Saat: 09:52
Son Yorum: hi_selamlar
  sha512 Kodlama ve Kod Çözme [ÇÖZÜLDÜ] 3ddark 7 191 26-06-2018, Saat: 11:45
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi