VS2022 C++创建动态链接库,C#调用简单示例
打开VS2022,创建新项目,语言选择C++,项目类型选择“库”,在下拉列表里找到“动态链接库(DLL)。项目名称,默认用:Dll1。在项目,头文件里添加头文件:mydll.h#pragma once#ifdef __DLLEXPORT#define __DLL_EXP _declspec(dllexport)// 导出函数 - 生成dll#else#define __DLL_EXP _decls
打开VS2022,创建新项目,语言选择C++,项目类型选择“库”,在下拉列表里找到“动态链接库(DLL)。
项目名称,默认用:Dll1。
在项目,头文件里添加头文件:mydll.h
#pragma once
#ifdef __DLLEXPORT
#define __DLL_EXP _declspec(dllexport)
#else
#define __DLL_EXP _declspec(dllimport)
#endif
extern "C" __DLL_EXP int add(int a, int b);
在项目,源文件里添加源文件:mydll.cpp,代码如下:
#include<stdio.h>
#include "mydll.h"
#include"pch.h"
int add(int a, int b)
{
return a + b;
}
在项目,源文件里添加模块定义文件:Source.def,代码如下:
LIBRARY Dll1
EXPORTS add
其中,Dll1位DLL文件的名字,add为你想导出的函数。
在项目,右键–属性,配置属性,C/C++,预处理器,预处理器定义,下拉列表里点“编辑”,添加:
__DLLEXPORT
在项目,右键–属性,配置属性,C/C++,预编译头,预编译头,下拉列表里选择“不使用预编译头”
在项目,右键–生成,复制生成的DLL1.dll完全路径。
在C#中调用示例:
创建C#控制台程序,在Program.cs中的代码如下:
using System;
using System.Runtime.InteropServices;
namespace ConsoleApp1
{
class Program
{
[DllImport("D:\\Desktop\\Dll1\\Debug\\Dll1.dll")]
public extern static int add(int a, int b);
static void Main(string[] args)
{
int a = add(2, 3);
Console.WriteLine(a);
Console.ReadKey();
}
}
}
[DllImport(“D:\Desktop\Dll1\Debug\Dll1.dll”)] 里的路径为动态链接库的完全路径。
定义的外部静态函数函数名称必须与dll文件里的函数名称一致。
报错及其解决办法:
错误提示:System.BadImageFormatException:“试图加载格式不正确的程序。 (0x8007000B)”
问题点:32位程序调用了64位dll文件。
解决办法:在配置管理器里将应用程序与dll文件的配置改为一致。(Any CPU)为64位程序。
更多推荐
所有评论(0)