我有 1 个原生 c++ dll,CppApp,另一个项目是托管 c++,GatWayLibrary,使用 /clr 在 GatewayLibrary 中,我从原生 CppApp dll 调用函数。但我得到了未解决的令牌错误。这是我的代码片段:
CppApp.h
=========
#ifdef CPPAPP_EXPORTS
#define CPPAPP_API __declspec(dllexport)
#else
#define CPPAPP_API __declspec(dllimport)
#endif
class CPPAPP_API CppApp
{
public:
CppApp();
~CppApp();
ContextManager & contextMgr() { return m_rplContextMng; }
INativeListener* m_listener;
void registerListener(INativeListener* listener)
{
m_listener = listener;
}
...........
}
在单独的项目 GateWaylibrary 中,将本机 dll 包装为
#include "../CppApp/CppApp.h"
#include <vcclr.h>
using namespace System;
using namespace System::Runtime::InteropServices;
#pragma comment(lib, "CppApp.lib")
namespace GatewayLibrary{
//.net equvelant of the argument class
public ref class DotNetEventArg{
internal:
//contructor takes native version of argument to transform
DotNetEventArg(const NativeCPPArgs& args) {
....
...
}
托管 c++ 将链接错误作为来自本机 c++ 的所有函数调用的未解决标记。
我确实将 CppApp.lib 作为附加依赖项和目录包含在内。有人可以帮忙吗?非常感谢。
编辑:这里是我称之为原生 c++ `GatewayLibrary::EventGateway::EventGateway() { nativeCode_ = new CppApp();
//note; using 'this' in ctor is not a good practice
nativeListener_ = new NativeListenerImp(this);
//register native listener
nativeCode_->registerListener(nativeListener_);
}`