最近用delphi2010写了一个动态链接库,想要在C#的WinForm中调用,可是返回的值总是空,下面是具体情况:
1、delphi的dll代码
uses
SysUtils;
var WGS:system.AnsiString;//此处用全局变量,尝试用局部变量也不行
function func1(const a:PAnsiChar;b:PAnsiChar):Boolean;stdcall;//参数用PAnsiChar,也尝试过PChar
begin
WGS:=AnsiString('LL');
b:=PAnsiChar(WGS);//PChar('dd');//b的值在调用的地方始终是空值,没有改变
Result:=true;//这个值可以在调用dll的地方取到;
end;
exports
func1;
begin
end.2、c#中的接口代码class Idp
{
[DllImport("myPrj.dll", EntryPoint="func1",CharSet=CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern Boolean func1( string a, StringBuilder b);//b的类型尝试过string、ref string,都取不到值。
}
3、c#中调用的地方 StringBuilder b = new StringBuilder("");
string a = "aa";
Boolean bl= Idp.func1(a,b);//bl的值是true
textBox1.Text = b.ToString();//b的值是"",没有改变。我是做C#方面的,对delphi不熟悉,这个问题纠结好久了,网上的办法都尝试过,有的说delphi的pchar对应c#的string,有的说对应c#的stringbuilder,都尝试了---无效;请高手指教。delphi 动态链接库
1、delphi的dll代码
uses
SysUtils;
var WGS:system.AnsiString;//此处用全局变量,尝试用局部变量也不行
function func1(const a:PAnsiChar;b:PAnsiChar):Boolean;stdcall;//参数用PAnsiChar,也尝试过PChar
begin
WGS:=AnsiString('LL');
b:=PAnsiChar(WGS);//PChar('dd');//b的值在调用的地方始终是空值,没有改变
Result:=true;//这个值可以在调用dll的地方取到;
end;
exports
func1;
begin
end.2、c#中的接口代码class Idp
{
[DllImport("myPrj.dll", EntryPoint="func1",CharSet=CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern Boolean func1( string a, StringBuilder b);//b的类型尝试过string、ref string,都取不到值。
}
3、c#中调用的地方 StringBuilder b = new StringBuilder("");
string a = "aa";
Boolean bl= Idp.func1(a,b);//bl的值是true
textBox1.Text = b.ToString();//b的值是"",没有改变。我是做C#方面的,对delphi不熟悉,这个问题纠结好久了,网上的办法都尝试过,有的说delphi的pchar对应c#的string,有的说对应c#的stringbuilder,都尝试了---无效;请高手指教。delphi 动态链接库
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货