Ben fonksiyon isimlerini direk kullanmayı tercih ediyorum. Ancak tanımlama anlamında sizin gönderdiğiniz örneklerde bir sorun yok. Çalışan birkaç örnek tanımlama şekli aşağıdaki gibidir.
Kod: Tümünü seç
function GMP_GetDllVersion(pVersion: PByte): UInt32; cdecl; external 'GMPSmartDLL.dll';
procedure GetErrorMessage(ErrorCode: UInt32; Buffer: PByte); cdecl; external 'GMPSmartDLL.dll';
function Json_FiscalPrinter_Echo(szEcho_Out: PByte; EchoLen_Out, TimeoutInMiliseconds:integer): UInt32; cdecl; external 'GMPSmartDLL.dll';
function FiscalPrinter_Ping(TimeoutInMiliseconds: Integer): UInt32; cdecl; external 'GMPSmartDLL.dll';
Diğer kullanılacak fonksiyonları örnek .NET uygulaması içinden bakıp tanımlayabilirsiniz. Ancak yukarıdaki kodlar sizin bahsettiğiniz Access Violation hatasına sebep olmazlar. Bazı fonksiyonlar parametre olarak PByte gerektiriyor (örnek uygulama içinde "byte[]" şeklinde tanımlanmış parametrelerin Delphi karşılığı PByte oluyor). Bu parametreleri olduğu gibi değişken olarak vermemelisiniz. Değişkeni pointer olarak parametre geçmelisiniz. Eğer farklı bir kullanım var ise Access Violation hatası alma sebebiniz bundan kaynaklı olabilir.
Diğer taraftan .NET uygulaması içindeki "struct" tanımlarının Delphi karşılıklarını oluşturmadan DLL dosyasını kullanmanız mümkün değil. İlerleyen kısımlarda JSON kullanmanız gerekecek ve bu tanımlar olmadan JSON string oluşturamaycaksınız. Örnek birkaç struct tanımını bu konu başlığı altında paylaşmıştım. Bu tanımlar tercih edip kullanacağınız JSON kütüphanesine göre ufak değişiklikler gerektirebilir. Nerelerde değişiklik gerektiğini .NET uygulamasını debug ederek bulabilirsiniz ancak. Tamamen ücretsiz Visual Studio 2015 Community Edition sizin bu noktadaki ihtiyacınızı karşılamak için yeterlidir.
.NET uygulaması bazı fonksiyon kullanımları için DLL fonksiyon ismine çok benzeyen fonksiyonlar tanımlamış. Bunu JSON kullandığı tüm fonksiyonlar için yapmış neredeyse. Bu noktalarda sizin kullanım pratiğinize göre aynı şekilde kullanıp kullanmamak size kalmış.
Kısacası, C# ile yazılmış uygulamayı yaklaşk %95 oranında Delphi'ye çevirmeniz gerekli. Kalan %5 kısım JSON kullanımı, sizin uygulamanızın çalışma ekranındaki farklılıklar vb. olacaktır.
Hata aldığınız kodu paylaşabilirseniz yardımcı olmaya çalışırım.