私はマネージ.NET DLL /クラスライブラリを呼び出すTcl拡張を作成する必要があります。現在、私のアプリケーションの構造はです。Tcl> DLL Wrapper(C++ CLR)>。NET Class Library(VB.NET)、ここで ">"は関数呼び出しを表します。TclエクステンションVB.NET DLLを呼び出す
私の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に展開する必要があり、アプリケーションのファイルを別のアプリケーションと混用したくないということです。
この問題を解決する設定がいくつかあるようですが、どこがわからないのですか。どんな助けでも大歓迎です。
から.NETを呼び出すできるように構築されたTcl拡張であるガルーダが含まれますが、私はAppDomain.RelativeSearchPathを使用してディレクトリを指定します方法についていくつかの詳細を持っていますか? – jags0333