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ı: 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
[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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Table Type parametre gecisi hakkında (Çözüldü) adelphiforumz 1 397 09-04-2026, Saat: 15:53
Son Yorum: adelphiforumz
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 933 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  paslibvlcplayerin gec acilmasi sorunu-COZULDU sadikacar60 7 1.446 08-10-2024, Saat: 09:25
Son Yorum: mrmarman
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 4 7.137 08-10-2024, Saat: 09:20
Son Yorum: sadikacar60
  çözüldü-screenshot yapmak hk. sadikacar60 16 9.613 19-06-2024, Saat: 16:12
Son Yorum: bydelphi



Konuyu Okuyanlar: 1 Ziyaretçi