c# ve Delphi DLL load sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

c# ve Delphi DLL load sorunu

Mesaj gönderen adelphiforumz »

Selamlar

C# üzerinde aşağıdaki şekilde tanımları yapılmış bir dll fonksiyonunu alttaki şekilde delphide tanımlıyorum
ve sonra kullanmak istiyorum fakat program daha açılırken hata veriyor bu noktada sorun ne olabilir fikri olan varmı
HATA : "The procedure entry point Fnc_FirstLoad could not be located in the dynamic link library ProgramInit.dll."

Teşekkürler

C# Tanımlaması

Kod: Tümünü seç

        [DllImport("ProgramInit.dll", EntryPoint = "Fnc_FirstLoad", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 Fnc_FirstLoad(int Tg, byte[] pD, short MBL, ref short pDL);
Delphi Tanımlaması

Kod: Tümünü seç

        const
          constDLL = 'ProgramInit.dll';
        function DLL_Fnc_FirstLoad(Tg : Integer; pD : array of byte; MBL : SmallInt; pDL : SmallInt):UInt32; cdecl; External constDLL name 'Fnc_FirstLoad';
Delphideki kullanımı

Kod: Tümünü seç

var
   resp : UInt32;
   arr : array [0..99] of byte;
    len : SmallInt;
begin
    len := 0;
    FillChar(arr, Length(arr), 0);
    resp := DLL_Fnc_FirstLoad(42, arr, Length(arr), len);
end;  
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen SimaWB »

DLL'de Fnc_FirstLoad fonksiyonu yok diyor sanırım.
tdump.exe ile DLL içindeki fonksiyonun ismi Fnc_FirstLoad mi kontrol edebilirsiniz.

Command prompt'ta DLL'in olduğu dizine gidip:

Kod: Tümünü seç

tdump.exe -ee ProgramInit.dll
There's no place like 127.0.0.1
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen adelphiforumz »

Selamlar
kontrol ettiğimde tüm fonksiyon isimleri doğru küçük büyük harfe kadar aynı
aynı dll c# tarafında çalışıyor sorun vermiyor.
sorun delphi tarafında acaba tür dönüşümleri hatamı yapıyor diye düşündüm. hiç parametresi olmayan bir fonksiyonuda denediğimde
yinede çalışmadı
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen sabanakman »

delphi de export edilen fonksiyonlar stdcall tanımlayın ama C# tarafında cdecl şeklinde tanımlı sanırım. Delphi üzerinde de aynı şekilde tanımlayın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen ertank »

DLL .NET için tanımlanmış DLL olabilir mi?

Ayrıca Delphi içindeki fonksiyon adını değiştirmiş görüküyorsun. Delphi tarafında da birebir aynı isimde tanımlayarak deneyebilirsin.

Kod: Tümünü seç

function Fnc_FirstLoad(Tg : Integer; pD : array of byte; MBL : SmallInt; pDL : SmallInt):UInt32; cdecl; External constDLL;
Bunlar dışında fazla birşey de aklıma gelmiyor açıkçası.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen adelphiforumz »

Ben sadece örnek olması açısından bu şekilde yazdım birebir tanımlamaları yapsamda çok bir şey değişmedi
uğraştığım iş Ingenico POS'un kullandığı "GMPSmartDLL.dll" dosyası ile alakalı bu dosyayı delphiden kullanan varmıdır hiç
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: c# ve Delphi DLL load sorunu

Mesaj gönderen ertank »

GMPSmartDLL.dll dosyası "normal" DLL dosyasıdır. .NET DLL dosyası değildir. Delphi içinden kullanabilirsiniz. Ancak fonksiyon tanımlamaları gerçekten uğraştırıcı. Ayrıca eski C dilinden yeni C# diline dönüşüm yapıldığı için içinde garip kullanımlar mevcut. Son olarak DLL çağrılarını kendine has JSON formatı ile yapıyor.

Bende kendisi ile biraz uğraşmış birisi olarak C# örneğini inceleyerek adım adım her bir fonksiyon üzerinde çalışman gerekli diyebilirim. Meşekkatli olacaktır.

Benim tarafımda da bitmiş birşey yok. Yarıda bırakmış durumdayım.

Ancak senin vermiş olduğun örnek ProgamInit.dll üzerinden. GMP ile ilgili değil sanırım bu DLL. Yanılıyor muyum?
Cevapla