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. 【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html   ...

  2. 逻辑运算符&逻辑短路

    (1)and 逻辑与 全真则真,一假则假 print(True and True) #True print(False and True) #False print(False and False) ...

  3. CentOS之Shell基础

    Linux默认的shell版本是bash. 我们所敲的命令都是有记录的:被保存在.bash_history文件中.只有当用户正常突出shell时,命令才会保存至.bash_history中. !!:连 ...

  4. 常见的web安全及防护原理

    1.0 sql注入 sql注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. sql注入防护: 1.永远不要信任用户的输入,要 ...

  5. Hbase访问方式

    Hbase访问方式 Hbase shell命令操作 Hbase shell命令操作--general操作 首先启动Hbase 启动shell 查看表结构 删除一个表 创建表和查看表结构 插入几条数据 ...

  6. datagrid行内编辑时为datetimebox

    $.extend($.fn.datagrid.defaults.editors, { datetimebox: {// datetimebox就是你要自定义editor的名称 init: functi ...

  7. Android忘记锁屏密码如何进入手机?

    Android忘记锁屏密码如何进入手机?     1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...

  8. day6--二分查找法

    二分查找法 我们在使用一个列表的时候,往往需要找到一个元素的位置也就是它的索引,按照一般的情况,肯定是一个一个的找过去,元素多了就是一件麻烦事.. 后来就引进了一个概念:二分查找法 它是根据情况将数据 ...

  9. [UGUI]图文混排(二):Text源码分析

    UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f ...

  10. java se 随机数。生成

    public class test { public static void main(String[] args) { getRandomNum1(); getRandomNum2(); getRa ...