在此将方法贴出来,方便遇到这个问题的朋友
.net 调用delphi动态链接库
public partial class _Default : System.Web.UI.Page
{
[DllImport("QBSqlData.dll")]
public static extern int SelectSqlData(ref StringBuilder sbStr);
//public static extern StringBuilder SelectSqlData();
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sbStr = new StringBuilder();
int result = SelectSqlData(ref sbStr);
string str = sbStr.ToString();
TextBox2.Text = result.ToString();
TextBox1.Text = str;
}
}
delphi动态库的定义
function SelectSqlData(var sbStr:PChar):Integer;stdcall;
var cdsData:TClientDataSet;
str:PChar;
s:string;
len:Integer;
begin
HotelConNet.ReadDataset('SELECT Top 50 * FROM feeitem ',cdsData);
s:=string(cdsData.XMLData);
len:=Length(s);
str:=PChar(s);
GetMem(sbstr,len);
CopyMemory(sbStr,str,len);
Result:=len;

.net 调用delphi动态链接库
public partial class _Default : System.Web.UI.Page
{
[DllImport("QBSqlData.dll")]
public static extern int SelectSqlData(ref StringBuilder sbStr);
//public static extern StringBuilder SelectSqlData();
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sbStr = new StringBuilder();
int result = SelectSqlData(ref sbStr);
string str = sbStr.ToString();
TextBox2.Text = result.ToString();
TextBox1.Text = str;
}
}
delphi动态库的定义
function SelectSqlData(var sbStr:PChar):Integer;stdcall;
var cdsData:TClientDataSet;
str:PChar;
s:string;
len:Integer;
begin
HotelConNet.ReadDataset('SELECT Top 50 * FROM feeitem ',cdsData);
s:=string(cdsData.XMLData);
len:=Length(s);
str:=PChar(s);
GetMem(sbstr,len);
CopyMemory(sbStr,str,len);
Result:=len;
总结;之前在网上搜寻了很久关于C#调用delphi动态链接库的问题都没有找到答案主要是赋值的问题没有弄明白。关键应当使用CopyMemory函数赋值。
源码下载地址:http://download.youkuaiyun.com/detail/shenfeng1016/5680059
成功调用结果: