添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

作为dll的初学者,从自身的角度来说一下dll带给我的个人感觉。

1.感觉相当于一个可移动的方法集合,里面可以写各种方法,只要可以进行成功的调用,就可以完全使用其中的方法。

2.支持多种语言,因为做这个有一段时间了,现在发现c#也可以调用c++的dll,说明dll的可移植性很强。

话不多说,咱们直接进行调用步骤:

(1)先说比较直接,同时也是静态的调用(个人感觉最快,但是貌似很死板)

首先你得创建一个dll文件

头文件这里你想怎么写都可以,大部分都是写自己需要的。 当然我在这里偷懒了,其实要是使整个界面更加整洁的话,可以新建一个Caculate的头文件这个头文件当中,在下面同样建立一个对应的cpp执行文件。这样你就更加分类清晰(我也是后来才发现的,刚才是没意识到)例如下面这样,添加的方式:鼠标右键头文件,选择.h的文件类型,然后自己起名,下面的cpp文件也是一样。

回到刚才说的创建dll文件,头文件按着要求写好了,extern "C" _declspec (dllexport) 这句话的意思使按着c语言的格式导出。下面我们写cpp文件,

这里的这个头文件相当于上面你写的那个所有头文件的集合,因为我上面偷懒了,我把需要的头文件都写在pch.h下面了,所以这里也是用的pch.h。如果你上面改了你就用Caculate.h(当然pch.h也不能少)。

做示范,我就随便写了一个字符串合成(偷懒之王)。然后选择解决方案,鼠标右键选择重新生成,dll这头就完成了。

我们创建一个c++的控制台去调用它。在控制台可没有什么头文件的单独集合,直接上程序

在这里注意两点,一个是#pragma comment(lib,"DLL.lib") 这个需要是你的dll文件名称,后面的那个lib先不用管。

另外一个是extern "C" _declspec (dllimport) string sincity(string Name, double num1, double num2);,前面写的是dllexport,现在改成了dllimport。‘

然后我们找到刚才的那个dll文件,右键解决方案---》在文件资源管理器当中打开文件夹---》Debug---》看到.dll和.lib两个文件,如图

选择他们俩,复制。

然后找到你写的控制台文件,同样在文件资源管理器当中打开文件夹,然后找到你的控制台名称文件夹(我写的是TestDLL)

点击进去,直接把刚才那两个文件直接进行复制。 运行搞定。

上述方法简单粗暴,适合调试的时候暴力使用,但是个人觉得不适合编程(高大上的程序员)。所以我在dll文件当中,右键我写的那个dll文件(我起的名字就叫DLL),找到属性,然后常规下面的输出目录我直接改为了上述控制台粘贴lib和dll的那个文件夹路径。在这里你要注意写的是绝对路径还是相对路径,绝对路径的话,传给别人用可能会报错(个人建议写成相对路径)。

上述就是第一种,粗暴的写法,下面我们用一种温柔(复杂)的方法。或许“温柔的一半是知识”这句话的道理就是这样。

为了简化操作,我就直接把上面的那个dll配置文件全部还原如初,同时我也把复制过去的文件进行删除(偷懒本质)。

另一种方式,同上先将dll文件当中的.dll文件拷贝在当前控制台的文件下(与上述方法少复制了一个.lib文件,不要感觉不如上述方法),然后进行编写控制台代码

在这里不需要导出文件名称了,直接利用"window.h"直接进行查找(只要你记忆力足够好记得dll里面的各种函数名和dll名称那么你想调用就调用,想删除就删除,保证不会报错)。 为了懒懒的我,直接给大家一个模板

HINSTANCE hInst;//hInst 随便换,想叫啥就叫啥 hInst = LoadLibrary(L"DLL.dll");//里面DLL.dll得和你之前写的dll文件名称一致(其实就是你复制过来的那个文件) typedef string(*ADDPROC)(string name, double num1, double num2);//这里主要是你的那个函数的返回类型和需要参数类型 至于ADDPROC这个不能改 ADDPROC Sincity = (ADDPROC)GetProcAddress(hInst, "sincity");//sincity是我的那个调用函数名不能改,前面的那个Sincity随便改叫啥都行 if (!Sincity) return -1;

大家发现没有,这个控制台只需要对面给一个dll,其他什么都不要配置,直接干就完了。当然偷懒的我还是喜欢直接改了输出目录,省的我每次来回复制。这次先写这个C的控制台调用c++dll,下次写C#的控制台调用c++dll。本人小白(大懒)一名,初学DLL,如果有不对的地方,希望大家多多指教。在此谢谢大家了。在这个现实的社会中,灾难总是接踵而来,以为叫一声救命就会有人来救你吗?错! 因为关键时刻总是要靠自己!

作为dll的初学者,从自身的角度来说一下dll带给我的个人感觉。1.感觉相当于一个可移动的方法集合,里面可以写各种方法,只要可以进行成功的调用,就可以完全使用其中的方法。2.支持多种语言,因为做这个有一段时间了,现在发现c#也可以调用c++的dll,说明dll的可移植性很强。话不多说,咱们直接进行调用步骤:(1)先说比较直接,同时也是静态的调用(个人感觉最快,但是貌似很死板)首先你得创建一个dll文件头文件这里你想怎么写都可以,大部分都是写自己需要的。当然我在这里偷懒了,..
1、导出C函数以用于C或 C++ 的项目 如果使用C语言 编写 DLL ,希望从中导出函数给C或 C++ 的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言。如果是从 C++ 语言模块使用,则用C链接声明这些函数。如果使用此技术并为 DLL 提供头 文件 ,则这些函数可以原封不动地由C和 C++ 模块使用。 以下代码演示可由 C 和 C++ 客户端应用程序使用的头 文件 : // MyCFunc...
C#引用C/ C++ DLL 的两种方法前言方法1:常用的 DLL Import方法方法2:CLR封装法 工作中,需要给客户提供公司产品的.NET动态库,但驱动工程师往往只提供C编译的库,这里就需要我做一些中间工作,方便客户使用我们的产品。 方法1:常用的 DLL Import方法 一般这种方法用于 调用 非托管动态库,很常见,这里我就不做赘述,推荐一个好用的网站方便大家做参考, 链接: pinvoke.ne...
注意事项:用 Dll Import 属性修饰的方法必须具有 extern 修饰符。 1、使用步骤可分为: C++ dll 文件 导入、 C++ dll 函数重写、C# 调用 C++ 的函数: (1)导入库 文件 :C#中要引用 C++ dll ,需要使用函数“ Dll Import”,添加其作用域:using System.Runtime.InteropServices; Dll Import属性应用于方法,要求最少要提供包含入口点的 dll 的名称。.. 1. 创建 C++ DLL 文件 首先,您需要创建一个 C++ 动态链接库( DLL 文件 ,其中包含您想要在 Python 中使用的 C++ 函数。下面是一个简单的示例,演示如何在 Visual Studio 中创建一个简单的 DLL 文件 : ```cpp // Sample DLL .cpp #include "pch.h" #include "Sample DLL .h" extern "C" int add(int x, int y) return x + y; 请注意,我们使用 `extern "C"` 来告诉编译器使用 C 语言的函数命名规则,以便在 Python 中 调用 。 2. 编译 DLL 文件 使用 Visual Studio,您可以将上述代码编译为 DLL 文件 。在生成 DLL 文件 之前,您需要将项目属性中的运行库设置为“多线程 DLL (/MD)”。 3. 在 Python 中使用 ctypes 调用 DLL 在 Python 中,您可以使用 `ctypes` 模块来 调用 DLL 中的函数。下面是一个简单的示例: ```python import ctypes # 加载 DLL 文件 sample_ dll = ctypes.C DLL ('Sample DLL . dll ') # 调用 DLL 中的函数 result = sample_ dll .add(1, 2) # 输出结果 print(result) 在上面的示例中,我们首先使用 `ctypes.C DLL ()` 函数加载 DLL 文件 。然后,我们可以使用 `sample_ dll .add()` 来 调用 DLL 文件 中的 `add()` 函数。最后,我们输出了结果。 请确保在加载 DLL 文件 时使用正确的 文件 名和路径。如果 DLL 文件 不在当前工作目录中,则需要指定完整路径。 希望这个示例能够帮助您了解如何在 Python 中使用 `ctypes` 调用 C++ 编写 DLL 文件