原型:
GetTAErrMsg 获取错误信息。
function GetTAErrMsg (ErrNo:integer;p1:PChar): Boolean;
参数
ErrNo 错误号码。
p1 用于返回错误信息。调用前必须先开辟足够的空间。
___________________________________________________________________[DllImport("TerAccDll.dll", EntryPoint="GetTAErrMsg")]
public static extern bool GetTAErrMsg (int ErrNo,out string p1);调用产生异常:
string ErrMsg;
bool b=GetTAErrMsg (1008,out ErrMsg);求教高手,TerAccDll.dll是厂家提供的DLL,我要怎样才能得到ErrMsg???
GetTAErrMsg 获取错误信息。
function GetTAErrMsg (ErrNo:integer;p1:PChar): Boolean;
参数
ErrNo 错误号码。
p1 用于返回错误信息。调用前必须先开辟足够的空间。
___________________________________________________________________[DllImport("TerAccDll.dll", EntryPoint="GetTAErrMsg")]
public static extern bool GetTAErrMsg (int ErrNo,out string p1);调用产生异常:
string ErrMsg;
bool b=GetTAErrMsg (1008,out ErrMsg);求教高手,TerAccDll.dll是厂家提供的DLL,我要怎样才能得到ErrMsg???
你可以试试将string ErrMsg 改为 StringBuiler ErrMsg = new StringBuilder(256)
其中StringBuilder长度你可以参考dll的说明文档或者原始声明,只要返回的错误信息
不超过这个长度即可。
public static extern bool GetTAErrMsg (int ErrNo,out byte[] p1);byte[] ErrMsg = new byte[256];
bool b=GetTAErrMsg (1008,out ErrMsg);
string sMsg = System.Text.Encoding.ASCII.GetString(ErrMsg,0,256);试试看把
[DllImport("TerAccDll.dll", EntryPoint="GetTAErrMsg",CallingConvention = CallingConvention.Cdecl ,CharSet=CharSet.Ansi)]
public static extern bool GetTAErrMsg (int ErrNo,StringBuilder sb);调用的时候StringBuilder sb = new StringBuilder(1000);
但是在WinXP下有一个函数调用时就提示未将对象引用设置到对象实例
我的dll有4个函数,其他3个都遇到没问题
public static extern bool GetTAErrMsg (int ErrNo, StringBuilder p1); 调用:
StringBuilder ErrMsg=new StringBuilder(255);;
bool b=GetTAErrMsg (1008, ErrMsg); 不需要定义为out声明。
这样就OK,多谢各位的帮助