私はデルファイ(未知のバージョン)、デルファイ(過去2009年)で動作する第三者 "ミステリーdll"、C#コードで上記のdllを使用する悲惨な必要性、それを行う方法について。ここでC#でDelphi DLLを使用する
は、このDLLを使用してDelpiの例である:
type
TD_Query = function(host: WideString; port : Word;pud,query : WideString):WideString; stdcall;
procedure TForm11.Button6Click(Sender: TObject);
var
Handle : LongWord;
D_Query : TD_Query;
sss : WideString;
begin
Handle := LoadLibrary('kobrasdk.dll');
sss:='';
if Handle <> 0 then
begin
@D_Query := GetProcAddress(Handle, 'D_Query');
sss:=D_Query('host',8201,'pud','query');
FreeLibrary(Handle);
end;
end;
そしてここでは、C#で、それを解釈する私の試みです:
class Program
{
[DllImport("C:\\Games\\kobrasdk.dll", CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string D_Query(string host, ushort port, string pud, string query);
static void Main(string[] args)
{
D_Query("test", 8201, "test", "test");
}
}
は残念ながら、私が持っているとするとエラーになり:しようとしまし読むためにまたは書き込み保護されたメモリ。これはしばしば、他のメモリが壊れていることを示します。
私は1日中に読んだことから、おそらく戻り値の型、またはパラメータ型を参照することになりました。助けて?
あなたの呼び出し規約が他の問題の中で間違っているようです。私はデルファイの専門家ではないが、これは助けるかもしれないhttp://stackoverflow.com/questions/16601423/calling-a-delphi-method-in-a-dll-from-c-sharp –
Eww、DLL関数は決して戻ってはならない問題の原因となる可能性のあるあらゆるタイプの文字列。 –
このDelphi DLLがShareMemを使用する可能性はありますか? –