C#调用C++动态链接库dll之P/Invoke方式 — 1.无参无返回值函数调用
1.新建一个C++动态链接库(DLL)项目CPPTest
注意:此处不能改为C++空项目,然后由空项目修改成动态链接库项目。这样会导致程序发布时,在没有开发环境(用户电脑)的电脑上运行时,会始终抛出System.DllNotFoundException异常。

2.新建一个PInvokeTest.cpp文件,并写下如下代码
需要注意:下文中的两个函数名HelloWorld需要完全一致,只有这样才能确保被完全声明为一个其他语言可调用的全局函数。
#include "pch.h"
#include <iostream> extern "C" __declspec(dllexport) void HelloWorld(); void HelloWorld() { std::cout << "hello world!"; }
3.新建一个C#控制台程序CSharpTest

4.在C#控制台程序中的Program中加入如下代码
需要注意:在C#中声明的public static extern void HelloWorld(),1.必须声明为static;2.必须加上关键字extern;3.此处的HelloWorld必须和前文一致。
internal class Program { static void Main(string[] args) { HelloWorld(); Console.ReadLine(); Console.WriteLine(); } [DllImport("CPPTest.dll")] public static extern void HelloWorld(); }
5.编译解决方案,在编译完成后将CPPTest.dll复制到CSharpTest项目的exe文件目录下。
6.启动......你会发现你收到了一个Exception...
System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)”

7.如何解决呢,右键打开C++项目的属性,将平台改为x64;右键打开C#项目的属性,在生成中将目标平台修改为x64


8.启动......搞定!

参考 https://blog.csdn.net/Raink_LH/article/details/102677223

浙公网安备 33010602011771号