簡體   English   中英

使用C ++調用C#時無法在另一個appdomain中創建對象

[英]Unable to create object in another appdomain when invoking C# using C++

我創建了一個C#代碼,輸出類型為netmodule。 這是在C ++代碼中使用的。

我想創建一個已經加載了相同程序集的對象。 但是,在單獨的AppDomain中。 但是這樣做時,我無法使用CreateInstanceAndUnwrap方法加載程序集以創建對象。 當嘗試使用獨立的C#代碼執行相同操作時,它可以正常工作。

C ++:

TestClass __gc *testObj;
testObj = AppDomainProcessor::getInstance()->newTestObj((LPWSTR)domName);
//testObj->otherOperation...

C#

namespace TestNS {
public class AppDomainProcessor {
...
public TestClass newTestObj(String domName) {
AppDomain appDomain = AppDomain.CreateDommain(domName);


  TestClass testObj = (TestClass)appDomain.CreateInstanceAndUnwrap(typeof(TestClass).Assembly.FullName,typeof(TestClass).FullName);
//Could not load file or assembly 'MyManaged, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified
    return testObj;
    }
...
}

public class TestClass : MarshalByRefObject {
...
}
}

我打印了AssemblyName,並找到它作為從C ++代碼編譯的dll的名稱。 從獨立的C#嘗試時,它是exe的名稱。

當一起使用C ++和C#時,這是創建AppDomain的正確方法嗎? 或者我在創建AppDomain時犯了任何錯誤。 請協助。

終於成功了。 可能是因為我使用的是C ++托管DLL,所以它不起作用。

但是,即使當我手動輸入DLL位置並使用CreateInstanceFromAndUnwrap加載時,它也不起作用。 但是,當程序集解析失敗時,它將觸發AssemblyResolve事件。 我正在使用執行同一程序集來創建新的AppDomain。 這是代碼。

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
            return Assembly.GetExecutingAssembly();
        }

無法加載時,它將返回當前的Assembly並可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM