Мне нужно создать расширение Tcl, которое вызывает управляемую .NET DLL / библиотеку классов. В настоящее время структура моего приложения: Tcl> DLL Wrapper (C ++ CLR)> .NET Class Library (VB.NET) , где ">" представляет вызов функции.
Моя VB.NET DLL просто берет значение и возвращает его обратно, пока что оно остается простым. В конце концов, это сделает более продвинутые вещи, использующие некоторые функции .NET.
Public Class TestClass
Public Function TestFunction(ByVal param As Integer) As Integer
Return param
End Function
End Class
My Tcl Extension (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 расширения, то происходит сбой расширения, когда он создает объект TestClass. Я заметил, что если библиотека VB.NET перемещена в C: \ Tcl \ bin, расширение найдет ее , и TestCmd можно будет назвать просто отлично. Проблема заключается в том, что это в конечном итоге потребуется для развертывания на нескольких компьютерах, и желательно не смешивать файлы моего приложения с файлами другого приложения.
Кажется, должны быть какие-то настройки конфигурации, которые решат эту проблему, но я не уверен, где. Любая помощь с благодарностью.