c++ DLL 文件,建议用最简单的c++编辑工具。不会加入很多无关的DLL文件。本人用codeblocks+mingw。不像

VS2010,DLL编译成功,调用的时候会提示缺其他DLL。 系统生成的main.h和main.cpp

#ifndef __MAIN_H__

#define __MAIN_H__

#include <windows.h>

/* To use this exported function of dll, include this header

* in your project.

*/

#ifdef BUILD_DLL

#define DLL_EXPORT __declspec(dllexport)

#else

#define DLL_EXPORT __declspec(dllimport)

#endif

#ifdef __cplusplus

extern "C"

{

#endif

int DLL_EXPORT Add(int plus1, int plus2); //导出函数Add

#ifdef __cplusplus

}

#endif

#endif // __MAIN_H__

#include "main.h"

// a sample exported function

int DLL_EXPORT Add(int plus1, int plus2) //导出函数Add 的实现

{

int add_result = plus1 + plus2;

return add_result;

}

extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

{

switch (fdwReason)

{

case DLL_PROCESS_ATTACH:

// attach to process

// return FALSE to fail DLL load

break;

case DLL_PROCESS_DETACH:

// detach from process

break;

case DLL_THREAD_ATTACH:

// attach to thread

break;

case DLL_THREAD_DETACH:

// detach from thread

break;

}

return TRUE; // succesful

}

只有一个简单函数Add,就是为了测试delphi能不能成功调用

delphi 用按钮加入调用函数

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

btn1: TButton;

Edit1: TEdit;

procedure btn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

_DLLMoudle: THandle;

_GetAdd:function (plus1:Integer; plus2:Integer):Integer;cdecl;

//动态调用,不要少了cdecl,百度看到是因为dll调用函数,传参数的差异

// function Add( plus1:Integer; plus2:Integer):Integer;

// stdcall; external 'MyDll.dll' name 'Add';

// 静态调用,静态调用有问题,还是声明stdcall 再C++种声明导出函数的原因

// 把stdcall 改为cdecl 就可以用静态调用了。具体C++声明函数和delphi对应关系看后面

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

var

l_int : integer;

begin

try

_DLLMoudle := Loadlibrary('MyDLL.dll');

ShowMessage('加载成功!!!');

except

ShowMessage('加载失败!!!');

Exit;

end;

if _DLLMoudle > 32 then

begin

try

begin

@_GetAdd:=GetProcAddress(_DLLMoudle,'Add');

l_int:=_GetAdd(5,6);

Edit1.Text:=IntToStr(l_int);

end

except

ShowMessage('有问题!');

end;

end;

// l_int:=Add(1,3);

// Edit1.Text:=IntToStr(l_int);

end;

end.

C++的参数调用方式 对应的DELPHI的参数调用方式

_declspec cdecl

WINAPI,CALLBACK stdcall

PASCAL pascal

以上请多试一下。我也是测试很多次才成功的。以后核心逻辑用C++。

Delphi动态调用C++写的DLL的更多相关文章

  1. 发现个delphi调用vc写的Dll中包括pchar參数报错奇怪现象

    发现个delphi调用vc写的Dll中包括pchar參数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会执行报错,在之前随意加上条语句就不报错了奇怪! vc的DLL源代码地址 ...

  2. Delphi7程序调用C#写的DLL解决办法(转)

    近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个 ...

  3. Delphi7程序调用C#写的DLL解决办法

     近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一 ...

  4. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  5. C#动态调用C++编写的DLL函数

    C#动态调用C++编写的DLL函数 动态加载DLL需要使用Windows API函数:LoadLibrary.GetProcAddress以及FreeLibrary.我们可以使用DllImport在C ...

  6. Delphi动态调用Java的WebService 转

    Delphi动态调用Java的WebService —— 基于“Axis2发布WebService例子(HelloWorld)” uses ComObj; var WsObject: Variant; ...

  7. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  8. QT调用C#写的Dll

    参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要 ...

  9. 【转载】java调用C++写的DLL

    用java调用C++写的DLL一直以来都是一个比较麻烦但又很常见的问题. 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.so 文件,如 ...

随机推荐

  1. 获取SQL数据库表空间结构

    if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')drop ...

  2. 使用Dotfuscator混淆你的.net程序

    简介 众所周知C#等net框架的程序是无法防止反编译的,但可以通过混淆,让反编译出来的代码非常难看. Dotfuscator是微软推荐使用的第三方混淆器,用来保护你的net程序.可以在安装VS的时候顺 ...

  3. Android:真机调试遇到的问题(You need to use a Theme.AppCompat theme (or descendant) with this activity)

    Android:真机调试遇到的问题(You need to use a Theme.AppCompat theme (or descendant) with this activity). 在调试&l ...

  4. SparkStreaming性能调优

    合理的并行度 减少任务启动开销 选择合适的batch Duration 内存调优 设置合理的cpu数

  5. Python网络爬虫相关基础概念

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫    1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...

  6. 2013年第四届蓝桥杯JavaB组省赛试题解析

    题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题和第六题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 第一题 ...

  7. 如何安装 Microsoft Office 兼容包,以便您可以在早期版本的 Microsoft Office 中打开和保存 Office Open XML 格式

    https://support.microsoft.com/zh-cn/kb/923505 针对 Office 2003 的支持已终止 Microsoft 已于 2014 年 4 月 8 日终止了针对 ...

  8. uva-10700-贪心

    题意:对于一个只有加法和乘法的序列,没有加法和乘法的优先级,问,结果最大值和最小值是多少,数字范围 1<=N <= 20 解题思路: (A+B)*C - (A+(B*C)) = AC + ...

  9. css:蓝环章鱼

    许多海洋生物色彩艳丽,这次用css仿制一下蓝环章鱼的蓝环 <script type="text/javascript" src="http://cdn.bootcs ...

  10. 58.纯 CSS 创作一只卡通鹦鹉

    原文地址:https://segmentfault.com/a/1190000015339977 优化后效果地址:https://scrimba.com/c/c97Z2vuD 感想:消除了图片外的:h ...