C++ 프로그램을 가져와 CLR을로드하고 C# 라이브러리에서 함수를 호출해야합니다. 호출해야하는 함수는 COM 인터페이스를 매개 변수로 사용합니다.CLR 호스팅 : 임의의 메서드 서명을 사용하여 함수를 호출 하시겠습니까?
내 문제는 CLR 호스팅 인터페이스 만이 서명 메소드를 호출 할 것으로 보인다:
int Foo(String arg)
예,이 C++ 코드로드 CLR 및 "TEST.EXE에 P.Test 기능을 실행 "
ICLRRuntimeHost *pClrHost = NULL;
HRESULT hrCorBind = CorBindToRuntimeEx(NULL, L"wks", 0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pClrHost);
HRESULT hrStart = pClrHost->Start();
DWORD retVal;
HRESULT hrExecute = pClrHost->ExecuteInDefaultAppDomain(L"C:\\Test.exe", L"P", L"Test", L"", &retVal);
내가이 방법 서명이있는 함수를 호출하기 만하면됩니다 (필자는 C# 코드를 자신의주의를, 그래서 그것을 변경할 수) :
void SomeFunction(IFoo interface)
여기서 IFoo는 com 인터페이스입니다. 난 내가 이런 식으로 함수를 호출 할 수 할 경우 무엇을해야 수 :
IntPtr SomeFunction();
내가 된 SomeFuncion가 올바른 대리인이 다음 Marshal.GetFunctionPointerForDelegate를 사용하여 구성있을 수 있습니다. 그러나 호스팅 인터페이스가 int func (string) 시그니처가있는 함수를 호출하는 것 이외의 다른 작업을 수행하는 방법을 알아낼 수는 없습니다.
누구나 C# 코드에서 다른 서명으로 C# 함수를 호출하는 방법을 알고 있습니까?
(. 나는 이것을 위해 C++/CLI를 사용할 수 없습니다 나는 호스팅 API를 사용합니다.)
C# 프로그램과 상호 작용 (예 : 매개 변수로 COM 인터페이스 보내기 또는 다시 가져 오기)하거나 C++에서 C#으로 일부 메서드를 호출하려고합니까? – AVIDeveloper
저는 C++에서 하나의 C# 함수를 호출해야합니다 (그리고 int가 아닌 C#에서 IntPtr을 다시 얻습니다).나는 나머지를 돌볼 수는 있지만 이것을 할 방법이 없다. – LCC
당신이하고있는 일에 대해 좀 더 자세하게 생각하면 도움이 될 것 같습니다. C# 코드를 가져 와서 한 가지 작업을 수행하거나 더 많은 상호 운용성을 기대하고 있습니까? 관리되는 쪽과 관리되지 않는 쪽 모두를 제어하는 경우 C++/CLI가 가능하지 않은 이유는 무엇입니까? 마지막으로 관리되는 크로스 오버를 다시 정의 할 수있는 방법이 있습니다 (따라서 DllImport 사용). – Guvante