我使用 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有关。
答案 0 :(得分:0)
感谢@SantoshDhanawade ...
此脚本必须在目标计算机上运行:
RegAsm.exe -tlb -codebase yourdll.dll
注意:以管理员身份运行命令提示符。
此脚本创建一个tlb文件,并且必须替换为原始tlb文件。
干杯...