C#调用Delphi的dllPchar传参不稳定的情况
C#声明如下
[DllImport("yy_mzsfjk.dll")]
public static extern string fHisMzsf(int a, object BasicInfo, object RecipeInfo);
Delphi声明
function fHisYjsf(aHandle:Integer;aBasicInfo :OleVariant;aRecipeInfo:OleVariant):PChar;stdcall;
在Delphi中返回的一个Result :=Pchar('T');
在C#中调用函数
object[] a = new object[4];
a.SetValue(patinfo[0].ToString(), 0);
a.SetValue(patinfo[1].ToString(), 1);
a.SetValue(patinfo[2].ToString(), 2);
a.SetValue(patinfo[3].ToString(), 3);
object[] b = new object[1];
b.SetValue(cfinfo[0].ToString(), 0);
string s = fHisMzsf(0, a, b);
在上面执行的那一句的时候我跟过,有时候会得到s 有时候就直接程序崩溃,
(不崩溃的情况是直接调用这个函数,不做其他任何操作,如果做其他操作,比如前面做一段业务处理等就会崩溃,怀疑和内存资源释放有关系,GC.Collect()没有效果)
不知道何解?
delphi函数中的所有操作都成功执行了,我在里面最后加上的
showmessage('T');
Result :=Pchar('T') ;
exit;
得到message能show出来。
不知道有哪位见过没有
------解决方案--------------------这应该和你的参数类型有关,OleVariant对应的什么类型,这个要考虑一下,应该可以传递字节流
------解决方案--------------------把你在Delphi使用fHisYjsf这个函数的几行代码贴出来看看。。
------解决方案--------------------改成这样试试:
[DllImport("yy_mzsfjk.dll",CallingConvention=CallingConvention.StdCall)]
public static extern string fHisMzsf(IntPtr a, object BasicInfo, object RecipeInfo);
------解决方案--------------------在工程的调试属性:勾上启用非托管代码调试,F11进入非托管代码,看看问题到底处在哪里?