Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

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
  Datasnap Türkçe karakter sorunu [Çözüldü] hakanharbeli 4 118 11-02-2018, Saat: 03:29
Son Yorum: hakanharbeli
Star ıdHTTP Post hakkında? [Çözüldü] Cyber 1 87 06-02-2018, Saat: 13:36
Son Yorum: Cyber
  Form create h.k (Çözüldü ) cinarbil 12 267 25-01-2018, Saat: 12:09
Son Yorum: cinarbil
  Wsdl Xml Importer(Çözüldü) yhackup 17 223 09-01-2018, Saat: 15:42
Son Yorum: yhackup
  C Dll indeki Callback Nasıl Çevrilir? (Çözüldü) erkankurtaga 10 384 20-12-2017, Saat: 16:36
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi