Visual Studio 2019 使用C语言创建动态链接库(Dll)并使用C语言和C#实现调用
2021/8/19 17:07:40
本文主要是介绍Visual Studio 2019 使用C语言创建动态链接库(Dll)并使用C语言和C#实现调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考网址: https://blog.csdn.net/weixin_34976988/article/details/99625533
一、创建DLL
1、建立动态链接库项目
2、创建头文件和源文件
删除 framework.h、dllmain.c 等现有文件(照顾VS2013等低版本),创建新的头文件 Mydll.c Mydll.h
Mydll.h头文件代码如下:
#include<stdio.h>
_declspec(dllexport) void test_print(char const* str);
_declspec(dllexport) int test_sum(int a, int b);
Mydll.c 代码如下:
#include<stdio.h>
#include"Mydll.h"
void test_print(char const* str)
{
printf("测试输出的内容是:%s\n", str);
}
int test_sum(int a, int b)
{
return a + b;
}
3、配置C环境
右键项目 --> 属性 --> C/C++ --> 预编译头 -->预编译头 改为创建;如果第二步删除了pch.h,在预编译头文件里也要删除pch.h
右键项目 --> 属性 --> C/C++ --> 高级 -->编译为 改成 编译为 C 代码 (/TC)
应用后保存即可
4、生成dll
右键生成即可得到dll文件
二、C语言动态调用dll
C语言和C#都可以通过多种方法调用dll,动态调用是在运行时完成的,也就是程序需要用的时候才会调用,动态调用不会在可执行文件中写入DLL相关的信息。
动态调用主要用到LoadLibrary,GetProcAddress和FreeLibrary三个函数
一、创建C控制台运用,代码如下:
#include <stdlib.h>
#include <windows.h>
#include<stdio.h>
int main(int argc, char const* argv[])
{
void(* test_print)(char const*) = NULL;
int(* test_sum)(int, int) = NULL;
HMODULE module = LoadLibraryA("CreatDll.dll");
if (module == NULL)
{
system("error load");
}
test_print = (void(*)(char const*))GetProcAddress(module, "test_print");
test_sum= (int(*)(int, int))GetProcAddress(module, "test_sum");
if ( test_print != NULL)
{
test_print("输出测试");
}
else {
system("function p_test_print can not excute");
}
int sum_result;
if ( test_sum != NULL)
{
sum_result = test_sum(234, 432);
printf("求和结果是:%d\n", sum_result);
}
else {
system("function p_test_print can not excute");
}
FreeLibrary(module);
system("pause");
return 0;
}
2、将刚刚生成的DLL文件拷贝到控制台项目根目录即可。
3、运行结果
三、C#调用dll
C#通过映射同意可以动态调用dll,这里简单介绍静态调用dll。
1、创建C#控制台应用,添加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace TestDll
{
class Program
{
[DllImport("CreatDll.dll", EntryPoint = "test_sum", CallingConvention = CallingConvention.Cdecl)]
public static extern int test_sum(int a,int b);
static void Main(string[] args)
{
int a = 234, b = 432;
int sum = 0;
Console.WriteLine("{0}+{1}={2}",a,b,test_sum(a,b));
Console.ReadKey();
}
}
}
2、将生成的DLL文件拷贝到C#项目目录的Debug下,即可调用,调用结果如下:
项目源代码点击这里下载
————————————————
版权声明:本文为CSDN博主「smile_2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_34976988/article/details/99625533
这篇关于Visual Studio 2019 使用C语言创建动态链接库(Dll)并使用C语言和C#实现调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#