我需要创建一个调用托管.NET DLL/类库的Tcl扩展。目前,我的应用程序的结构是Tcl > DLL包装器(C++ CLR) > .NET类库(VB.NET),其中">“表示函数调用。
我的VB.NET DLL只是取一个值并返回它,暂时保持简单。最后,这将做一些更高级的事情,利用一些.NET功能。
Public Class TestClass
Public Function TestFunction(ByVal param As Integer) As Integer
Return param
End Function
End Class我的Tcl扩展(C++ CLR)创建了上述类型的对象。
int TestCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
{
// Check the number of arguments
if (objc != 2) {
Tcl_WrongNumArgs(interp, 0, objv, "arg");
return TCL_ERROR;
}
int param, result;
if (Tcl_GetIntFromObj(interp, objv[1], ¶m) != TCL_OK)
return TCL_ERROR;
SimpleLibrary::TestClass^ myclass = gcnew SimpleLibrary::TestClass(); //System.IO.FileNotFoundException
result = myclass->TestFunction(param);
Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
return TCL_OK;
}最后,我的Tcl脚本加载扩展并调用函数。
load SimpleTclExtension.dll
TestCmd 2如果我的VB.NET DLL与我的扩展DLL位于同一个目录中,则当它实例化TestClass对象时,扩展会崩溃。我注意到,如果将VB.NET DLL重新定位到C:\Tcl\bin,扩展将找到它,并且可以很好地调用TestCmd。问题是,这将最终需要部署在多台PC上,而且它更倾向于不将我的应用程序的文件与另一个应用程序的文件混合。
似乎应该有一些配置设置来解决这个问题,但我不确定在哪里。任何帮助都是非常感谢的。
https://stackoverflow.com/questions/9196073
复制相似问题