そのため、私が取り組んでいるプログラムは、ユーザーが (CodeDOM をコンパイラとして使用して) テキスト エディターに入力するソース コードから動的な .Net アセンブリを作成します。すべてのユーザー定義メソッドを含むこのアセンブリの IDispatch を取得する必要があります。
たとえば、ユーザーは次のように入力できます。
Imports System.Windows.Forms
Public Class Test
Function Hello
MessageBox.Show("Hello, World!")
End Function
End Class
これにより、参照できるインメモリ アセンブリが作成されます。IDispatch を取得するために使用しているコード:
//"file" the pointer to the in-memory assembly, "name" is the name of the type being created
HRESULT ScriptEngine::GetDispatch(void** disp) {
Object^ component = file->CreateInstance(name);
if (file != nullptr) {
*disp = Marshal::GetIDispatchForObject(component).ToPointer();
return S_OK;
else
return E_FAIL;
}
これにより IDispatch が正常に取得されますが、ユーザー定義のメソッドは含まれていません。代わりに、6 つの既定の IDispatch メソッド (QueryInterface、GetTypeInfo など) のみが含まれています。前の例の「Hello」など、定義済みのメソッドを取得できる必要があります。
このアセンブリからユーザー定義メソッドを含む IDispatch を取得するにはどうすればよいですか?