C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题。
C++生成的DLL一般只提供函数接口,不能直接用C#调用C++写的类,这样非常不方便,于是经过半天的反复测试,终于确定了一套可行的方案,下面就是整个流程的一个范例。
(1)编写C++类Mask,类前面的extern "C" class _declspec(dllexport)这么一串修饰符是必备的,不然无法导出类。
//Mask类头文件mask.h
#pragma once
extern "C" class _declspec(dllexport) Mask
{
public:
Mask(char* inputFile,int* maskValue,int maskLength);
virtual void Run(void);
~Mask(void);
private:
char* _inputFile;
int* _maskValue;
int _maskLength;
};
(2)Mask类内部实现,这里使用char*和int*这两个有代表性的参数,C#向C++进行参数的传递是很难弄