110,567
社区成员
发帖
与我相关
我的任务
分享
class CppTest
{
public:
CppTest();
~CppTest();
//以下函数中会用到成员变量(mData1,mData2等)
void Func1();
void Func2();
private:
//大量成员变量
int mData1;
double mData2;
};
使用 c++/CLI 封装。
C++中把Cpptest类封装到一个函数库中,函数库提供void Func1();void Func2()等方法,他们调用Cpptest实例的对应方法. C#中将两个方法导入到一个Helper类中,作为静态函数即可. 也就是说,对象实例化不要让C#接手了,你提供出去的库自己处理好,对外只提供C风格函数方法就行了.
[quote=引用 2 楼 以专业开发人员为伍 的回复:]使用 c++/CLI 封装。
public ref class InvokeCon
{
public:
InvokeCon();
~InvokeCon();
//以下函数分别转调CppTest中的Func1,Func2
void Func1();
void Func2();
private:
//这是CppTest类型的对象
CppTest* mCppTest;
};
//在构造InvokeCon对象时,初始化CppTest对象
InvokeCon::InvokeCon()
{
mData = new CppTest();
}
//销毁CppTest对象
InvokeCon::~InvokeCon()
{
delete[] mData;
}
void InvokeCon::Func1()
{
(*mData).Func1();
}
void InvokeCon::Func2()
{
(*mData).Func2();
}
目前我还有以下疑惑:
1.目前这种方法(将c++代码编译成静态库,然后被c++/cli封装后输出dll文件),是否有被反编译的风险(CppTest直接输出dll文件相比,谁的风险更高,或者更容易被反编译)?
2.这种调用方式效率如何?我初步测试下来,与直接调用dll效率差不多,但是目前缺乏大量测试验证;
3.是否有更优的方案,能够满足以上需求?
感谢您的耐心阅读,如果您有更好的方案,还请不吝指教!
Service.AddScopped 为每个http Web请求创建一个新实例。