原型:
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???

解决方案 »

  1.   

    作为输出参数最好使用StringBuilder,
    你可以试试将string ErrMsg 改为 StringBuiler ErrMsg = new StringBuilder(256)
    其中StringBuilder长度你可以参考dll的说明文档或者原始声明,只要返回的错误信息
    不超过这个长度即可。
      

  2.   

    StringBuilder试过,不行........有没有别的建议呢?
      

  3.   

    [DllImport("TerAccDll.dll", EntryPoint="GetTAErrMsg")]
    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);试试看把
      

  4.   

    用StringBuilder 应该是可以的,我试过是可以的。你看一下指定其他属性,如CharSet:
    [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);
      

  5.   

    我现在也遇到这个问题了,在Win2000下一切正常
    但是在WinXP下有一个函数调用时就提示未将对象引用设置到对象实例
    我的dll有4个函数,其他3个都遇到没问题
      

  6.   

    .net默认为Unicode编码,需要显式设置CharSet = CharSet.Ansi: [DllImport("TerAccDll.dll", CharSet = CharSet.Ansi)] 
    public static extern bool GetTAErrMsg (int ErrNo, StringBuilder p1); 调用: 
    StringBuilder ErrMsg=new StringBuilder(255);; 
    bool b=GetTAErrMsg (1008, ErrMsg); 不需要定义为out声明。 
    这样就OK,多谢各位的帮助