Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi dll metodundan C# a string dönmek
#1
Selam arkadaşlar.
Delphi' de oluşturulmuş bir dll' i C# içinde kullanıp, ondan string değer dönmek istediğimde C# da yazdığım program çakılıyor. Örneğin boolean tipinde parametre dönmekte sorun yaşamıyorum. String ve WideString olarak denedim, sonuç değişmedi.

String dönmenin pratik bir yolu var mı ? Deklerasyon ve kullanım şeklim aşağıdaki gibi ...

Delphi kodu :

    function fn_Test(out _bDosyaYok : Boolean; out _sSonucMesaji : WideString) : Boolean; cdecl;
   Begin
       Result := True;
       _bDosyaYok := True;
       _sSonucMesaji := 'ABCĞÜŞİÖÇ';
   End;


C# Deklerasyon :
       [DllImport("Test.dll", EntryPoint = "fn_Test", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
       private static extern Boolean fn_Test(out Boolean _bDosyaYok, [MarshalAs(UnmanagedType.LPStr)] out String _sSonucMesaji);

C# Kullanım :

Boolean bDosyaYok = false;
String sSonucMesaji = "";
fn_Test(out bDosyaYok, out sSonucMesaji);
Hiçbir mal sizin değil, neyi bölüşemiyorsunuz ?
Hiçbir can sizin değil, niye dövüşüyorsunuz ?

Hz. Mevlana
Cevapla
#2
    [DllImport("Project1.dll", EntryPoint = "fn_Test", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
   private static extern Boolean fn_Test(out Boolean _bDosyaYok, [MarshalAs(UnmanagedType.LPWStr)] out string _sSonucMesaji);



function fn_Test(out _bDosyaYok : Boolean; out _sSonucMesaji : WideString) : Boolean; cdecl;
begin
  Result := True;
  _bDosyaYok := True;
  _sSonucMesaji := 'ABCĞÜŞİÖÇ';
end;


exports fn_Test;


https://docs.microsoft.com/en-us/dotnet/...ew=net-5.0

LPWStr 21 A 2-byte, null-terminated Unicode character string. You cannot use the LPWStr value with an unmanaged string unless the string was created by using the unmanaged CoTaskMemAlloc function.


Çakılıyordan kastınızı anlamadım.
WWW
Cevapla
#3
Sonunda bir yöntem buldum. Belki birilerinin işine yarar, C# tarafındaki deklerasyonu şu şekilde yapınca çalışıyor :

[DllImport("Test.dll", EntryPoint = "fn_Test", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern Boolean fn_Test(out Boolean _bDosyaYok, [MarshalAs(UnmanagedType.BStr)] out String _sSonucMesaji);

Yani kısaca, UnmanagedType.BStr kullanmak gerekiyor stringler için. Delphi tarafında WideString verilmesi de gerekiyor. String kabul etmiyor.
Bulduğum kaynak : https://scrapax.com/pass-data-csharp-to-delphi-dll/


(27-01-2021, Saat: 17:35)ismailkocacan Adlı Kullanıcıdan Alıntı:
    [DllImport("Project1.dll", EntryPoint = "fn_Test", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
   private static extern Boolean fn_Test(out Boolean _bDosyaYok, [MarshalAs(UnmanagedType.LPWStr)] out string _sSonucMesaji);



function fn_Test(out _bDosyaYok : Boolean; out _sSonucMesaji : WideString) : Boolean; cdecl;
begin
  Result := True;
  _bDosyaYok := True;
  _sSonucMesaji := 'ABCĞÜŞİÖÇ';
end;


exports fn_Test;


https://docs.microsoft.com/en-us/dotnet/...ew=net-5.0

LPWStr 21 A 2-byte, null-terminated Unicode character string. You cannot use the LPWStr value with an unmanaged string unless the string was created by using the unmanaged CoTaskMemAlloc function.


Çakılıyordan kastınızı anlamadım.


C# da uygulama hiçbir hata vermeden duruyor. Çakılıyordan kastım buydu.
Hiçbir mal sizin değil, neyi bölüşemiyorsunuz ?
Hiçbir can sizin değil, niye dövüşüyorsunuz ?

Hz. Mevlana
Cevapla
#4
Paylaştığım kod çalışıyor.
WWW
Cevapla
#5
Teşekkürler, onu da inceleyeceğim.

Verdiğiniz kod [MarshalAs(UnmanagedType.BStr)] olarak çalışıyor. LPWStr de çalışmadı.
Hiçbir mal sizin değil, neyi bölüşemiyorsunuz ?
Hiçbir can sizin değil, niye dövüşüyorsunuz ?

Hz. Mevlana
Cevapla
#6
JMTD06X.png
WWW
Cevapla
#7
CharSet benim Delphi metodlarımda Ansi. Bununla ilgili olabilir (mi?). BStr haricinde gerçekten çalışmadı.
Hiçbir mal sizin değil, neyi bölüşemiyorsunuz ?
Hiçbir can sizin değil, niye dövüşüyorsunuz ?

Hz. Mevlana
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 624 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 495 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 321 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.317 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 1.979 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi