我试图在支持CLR的Visual C ++项目中使用PJSIP lirbrary。谷歌搜索了几个小时后,尝试我没有任何线索,为什么我的项目将无法编译。我会一步一步地告诉你我到目前为止做了什么,我希望你们能告诉我,我的配置有什么不对。
我可以创建包装类,编译得很好,创建了DLL。我也可以从我的Visual C ++项目中引用这个DLL,但是如果我尝试访问这些方法,Visual Studio编译器说,它并没有这些方法。
关于stackoverflow有很多关于这个主题的问题,但是,没有答案解决了我的问题(即How to access class in C++/CLI from C#?)
这是一些代码,我希望这更清楚我的观点:
#include <pjlib.h>
#include <pjlib-util.h>
#include <pjnath.h>
#include <pjsip.h>
#include <pjsip_ua.h>
#include <pjsip_simple.h>
#include <pjsua-lib/pjsua.h>
#include <pjmedia.h>
#include <pjmedia-codec.h>
#pragma once
using namespace System;
namespace PJSIPCLRWrapper {
public ref class pjsipWrapper
{
static int pjsipInit()
{
pj_status_t status;
/* Must init PJLIB first: */
// pj_init is a function from the PJSIP lib
status = pj_init();
return (int)status;
}
}
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
// this line procduces error C2882: 'PJSIPCLRWrapper': illegal use of namespace identifier in expression
PJSIPCLRWrapper.pjsipWrapper.pjsipInit();
return 0;
}
我整天搜索互联网如何解决问题。我有很多解决方案,但没有解决方案解决了我的问题。我很害怕,这是不可能的,或者我犯了一个可怕的错误。
感谢您的帮助! 问候 卢卡斯
答案 0 :(得分:0)
要在C ++ / CLI中调用静态函数,它应该是:
PJSIPCLRWrapper::pjsipWrapper::pjsipInit();
答案 1 :(得分:0)
我找不到任何我的问题的解决方案,除了我切换到Visual C ++而没有CLR支持我的程序。在这里,我可以使用没有包装器的完整PJSIP库。虽然,我不能利用CLR的优点: - /
祝你好运, 卢卡斯