作者albertliao (~咖啡瘾君子~)
看板C_Sharp
标题[问题]请问有关DllImport的问题
时间Mon Apr 27 09:02:51 2009
各位好:
小弟要再.Net中执行Tcl script , 用了tcl84.DLL这个档案 , 主要呼叫的定义如下:
[DllImport("tcl84.Dll", CharSet = CharSet.Unicode)]
public static extern int Tcl_Eval(IntPtr interp, [In] byte[] script);
public int evalScript(string script)
{
// if (hused) gch.Free();
Encoder d = Encoding.UTF8.GetEncoder();
char[] schars = new char[script.Length];
script.CopyTo(0,schars,0,script.Length);
int ilen = d.GetByteCount(schars,0,script.Length,true);
byte[] sbytes = new byte[ilen+1];
d.GetBytes(schars,0,script.Length,sbytes,0,true);
sbytes[ilen] = 0;
GCHandle gch = GCHandle.Alloc(sbytes,GCHandleType.Pinned);
// hused = true;
int ret = TclAPI.Tcl_Eval(interp,sbytes); //错在此行
gch.Free();
return ret;
// return TclAPI.Tcl_EvalObjEx(interp,getTclObject(script),0);
}
string script就是我的tcl命令 , 当script = "source c:/test.tcl";
在 TclAPI.Tcl_Eval(interp,sbytes); 便会出现以下讯息
'System.AccessViolationException' 的未处理例外状况 , 尝试读取或写入受保护的记忆体。这通常表示其他记忆体已损毁。
而且在console端出现一大推的?号 , 这行命令我确定是不会有问题的 , 而且这也是基本上有支援的
不晓得DllImport是不是有其他的参数可以设定或是怎麽样 , 还是这是本身dll档的问题
请高手解惑 , 小弟感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.131.208
1F:→ Cloud:我看过的都是这样写的..你试试看 04/27 14:46
2F:→ Cloud:[DllImport("tcl84.Dll", EntryPoint = "Tcl_Eval")] 04/27 14:47