LOADING

C# WPF导入C++的编译DLL(非C++/CLI托管)

C++部分


C++内容很简单,就正常的输出DLL写法的就好,不过这边最好加上C风格的DLL函数导出,这样后期在C#里面就不用指定入口函数名了,默认C++风格DLL的名字很难拼。
定义一个DLL的导入导出宏:

非托管C++只能导出全局函数,所以我们需要实现包装好我们的类和功能,在C#通过调用函数创建我们封装的类实例
.h头文件:
不要在意这个bUpdateMyself,这是我封装的一个功能,需要bool判断而已,大家根据实际情况改动自己的Create函数就好。

.cpp源文件
这里我尝试过,如果直接在C#里面储存C++指针,delete的时候DLL会发生内存泄漏…原因不明,所以这里我还是另外定义了一个全局的指针,delete的时候就靠它了。
不过Create函数还是会return一个指针到C#,说不定用得上呢?觉得没必要也可以不做这一步。

WPF (C#通用) 部分


这里我们添加一个新的cs代码文件,用来导入我们的DLL函数。


需要添加一个命名空间

导入格式,函数名必须一致:

底下再另外建一个类用来实现函数功能,当然也可以做到一个类上,看大家怎么方便怎么来,这么做主要是为了代码规范而已(提高代码易读性)

最后来到我们的MainWindow.xaml.cs里(不是WPF的话就去到想要实例化DLL的地方做如下操作就行)
定义一个类变量:

WPF的MainWindow构造函数,绑定Loaded事件,我们在窗口加载完之后加载dll,做这一步的操作不是很有必要,只是为了在窗口出现之后再显示我的内容而已:

执行初始化DLL方法,然后最好绑定一个窗口结束事件:

结束事件释放DLL:

需要注意的是,如果你的DLL是64位,并且C#项目设置如果是Any CPU平台的话,需要把首选32位关掉,或者直接把目标平台改成64,64位是无法兼容32位的,这个要注意,不然会报错。