Aaalso,
Ich hab ne simple Delphi DLL geschrieben:
Soll mir also den string zurückgeben.
Hab sie kompiliert und in C# folgendes geschrieben:
Doch der erhoffte string wird nicht ausgegeben.
Stattdessen bekomme ich ne HRESULT Exception : BadImageFormat?
Was ist an meinem Aufruf falsch, wieso funktioniert er nicht?
Ich hab ne simple Delphi DLL geschrieben:
C#-Quellcode
- library Project2;
- { Important note about DLL memory management: ShareMem must be the
- first unit in your library's USES clause AND your project's (select
- Project-View Source) USES clause if your DLL exports any procedures or
- functions that pass strings as parameters or function results. This
- applies to all strings passed to and from your DLL--even those that
- are nested in records and classes. ShareMem is the interface unit to
- the BORLNDMM.DLL shared memory manager, which must be deployed along
- with your DLL. To avoid using BORLNDMM.DLL, pass string information
- using PChar or ShortString parameters. }
- uses
- SysUtils,
- Classes;
- {$R *.res}
- Function ReturnSecretToken(key : Integer ) : string;
- Begin
- Result := 'MyToken_' + IntToStr(key);
- End;
- end.
Soll mir also den string zurückgeben.
Hab sie kompiliert und in C# folgendes geschrieben:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Runtime.InteropServices;
- namespace CallNativeDll
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Invoking native dll...");
- Console.WriteLine(InvokeNative());
- Console.ReadKey();
- }
- [DllImport("runtime.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
- public static extern IntPtr ReturnSecretToken(int key);
- private static string InvokeNative()
- {
- IntPtr retValue = ReturnSecretToken(123);
- return Marshal.PtrToStringUni(retValue);
- }
- }
- }
Doch der erhoffte string wird nicht ausgegeben.
Stattdessen bekomme ich ne HRESULT Exception : BadImageFormat?
Was ist an meinem Aufruf falsch, wieso funktioniert er nicht?
C# Developer
Learning C++
Learning C++