【问题标题】:Linking between c# and c++ code not working in 64 bit machinec# 和 c++ 代码之间的链接在 64 位机器上不起作用
【发布时间】:2016-10-01 22:37:08
【问题描述】:

我有通过 COM 链接的 C++ 和 C# 代码。 C# 正在生成 C++ 中包含的 TLB 和 DLL。

C# TLB 文件已在我的系统中注册。我已经在 32 位机器上完成了所有的编码。现在我已经在我的 64 位机器上使用了相同的两个程序并构建它们。构建成功并且正在生成 DLL/TLB 文件。在 64 位机器中,由 C++ 代码执行并给出正确的结果。但是,每当在我的 C++ 代码中遇到 C# 链接代码 sn-p 时,代码执行就会停止而不会引发任何错误。

可能是什么问题?

【问题讨论】:

  • 您是否尝试过在 64 位中构建 c++ 代码,然后使用 64 位版本的 dll 构建 c#?
  • @StianStandahl 是的,我已经在 64 位机器上构建了这两个代码。
  • 没关系。但是您选择了 64x 构建配置还是任何 cpu?因为,当您在 c# 代码中有 c++ 引用时,您必须使用 64 位构建配置构建 c++ 代码
  • 我选择了 64x 位

标签: c# c++ com tlb


【解决方案1】:

在哪里构建程序代码并不重要。 VS 本身是 32 位的,编译器(CSC.EXECL.EXE)本身也是 32 位的。

您需要确保在 64 位机器上运行的 C# 程序与 C++ 平台匹配。如果您在 C# 中使用了 AnyCPU,在 C++ 中使用了 32 位,它根本无法运行。

确保 C++ 和 C# 代码(在运行时)面向同一平台(运行时环境)。如果本机 (C++) 二进制文件 (EXE/DLL) 是为 32 位和 64-64 构建的,它将保持 32 位。 C# 二进制文件 (IL) 将根据当前操作系统重新编译为 32 位或 64 位。确认。

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多