具有非托管的c++;代码调用管理的c++;调用c#代码的代码 我很难精确地指出如何引用托管C++代码,这些代码从非托管C++代码调用C代码。让我列举几个场景: 我有我的非托管代码引用并调用我的托管代码,我的托管代码对我的c#代码的调用被注释掉,构建和工作都很好。我取消注释我的c#代码,现在我得到编译器错误,说我的c#命名空间不存在 在非托管代码中,我注释掉引用并调用托管代码。我的托管代码调用我的c代码。构建和运行都很好。。。你可以从这里了解情况
编译器错误是C2653 以下是我正在做的:具有非托管的c++;代码调用管理的c++;调用c#代码的代码 我很难精确地指出如何引用托管C++代码,这些代码从非托管C++代码调用C代码。让我列举几个场景: 我有我的非托管代码引用并调用我的托管代码,我的托管代码对我的c#代码的调用被注释掉,构建和工作都很好。我取消注释我的c#代码,现在我得到编译器错误,说我的c#命名空间不存在 在非托管代码中,我注释掉引用并调用托管代码。我的托管代码调用我的c代码。构建和运行都很好。。。你可以从这里了解情况,c#,c++,unmanaged,managed,C#,C++,Unmanaged,Managed,编译器错误是C2653 以下是我正在做的: 非托管C++代码:我已经设置链接器以包含我的托管C++ LIB文件。 #include "ManagedCpp.h" ManagedCpp::foo(); 托管C++: extern "C" __declspec(dllexport) void __stdcall foo() { CssCode::bar(); } C# 我做错了什么?据我所知,我需要对非托管代码隐藏我的c#调用,但我不太确定如何做到这一点。空脑袋的错误 我把托管C++
<强>非托管C++代码:我已经设置链接器以包含我的托管C++ LIB文件。
#include "ManagedCpp.h"
ManagedCpp::foo();
托管C++:
extern "C" __declspec(dllexport) void __stdcall foo()
{
CssCode::bar();
}
C#
我做错了什么?据我所知,我需要对非托管代码隐藏我的c#调用,但我不太确定如何做到这一点。空脑袋的错误
我把托管C++的调用放到头中的C代码中。哎呀。现在一切似乎都很好
提供更多的上下文。什么是编译器错误?CssCode
类的定义是什么,即bar()
方法?这是一个<代码>公共静态< /C>方法吗?我将编辑POST来提供更多信息。您可以在同一编译单元中混合非托管和托管C++。不需要将托管C++移到单独的DLL中。就这么说吧。另外,您可以通过非COM可见的程序集或通过CorXXX的API族直接调用非托管C++的C语言,在这种情况下,我试图与CPUMPITestTestFrand接口,因此设置我的非托管代码/CLR标志使得我必须使用内部测试引擎无法找到这些测试。所以你的第一个建议不符合我的需要。关于第二个建议,这个任务的首席工程师架构师推荐使用包装方法,原因很多,所以第二个解决方案我不能用,因为我的头脑更大。你是否从C++ DLL添加了对C汇编的引用?
public static void bar()
{
// From here it initializes some stuff from the registry
// into some data structures which I plan on marshaling
// back with other method calls, which I know involves placing
// things on the stack that can be returned normally to the
// managed c++ code which then will need to be marshed back to the
// unmanaged c++ code.
// All code will be static.
}