问题:从C ++ MFC

时间:2019-12-10 10:21:07

标签: c# c++ visual-c++ mfc unmanaged

我使用 UNMANAGED COM 使用tlb-file将C#项目链接到MFC C ++项目。该程序可以在主PC(我在其中编译代码)中正常运行。但是,当我在另一台计算机(具有相同操作系统,即Win 10)上运行该程序时,会出现运行时库错误

  

C#代码

namespace CSharpUnmanaged
{
public interface IGlobalInfo
{
    void multiPly();
    int Sum(int a, int b);
    double SuperPow(int x, int y);

}
public class GlobalInfo : IGlobalInfo
{
    public void multiPly()
    {
        int c = 4 * 5;
        System.IO.File.WriteAllText("D:\\test.txt", c.ToString());
        Debug.WriteLine("MultiPly:" + c.ToString());
    }

    public int Sum(int a, int b)
    {
        return a + b;
    }
}
}
  

C ++ MFC代码

#import "CSharpUnmanaged.tlb" named_guids raw_interfaces_only
int main(){
   HRESULT hr = CoInitialize(0);
   globalInfo.CreateInstance(__uuidof(CSharpUnmanaged::GlobalInfo));
   CoUninitialize();
   if (globalInfo == NULL) AfxMessageBox(L"NULL");
   globalInfo->multiPly();
}
  

我尝试跟踪该错误,并且确定问题与在运行程序期间保持为NULL的globalInfo有关。

1 个答案:

答案 0 :(得分:0)

感谢@SantoshDhanawade ...

此脚本必须在目标计算机上运行:

RegAsm.exe -tlb -codebase yourdll.dll

注意:以管理员身份运行命令提示符。

此脚本创建一个tlb文件,并且必须替换为原始tlb文件。

干杯...