c++builder动态调用dll

// 定义
typedef int __stdcall MyFunction (int x, char *str); int rtn = ;
String dllName = "XXXX.dll";
HINSTANCE hInstance = LoadLibrary(dllName.c_str());
MyFunction * pMyFunction = (MyFunction*) GetProcAddress(hInstance, "rdcompany"); // 函数名称要正确
if (pMyFunction == NULL)
{
// 提示
} rtn = pMyFunction(, "aa");
FreeLibrary(hInstance);
hInstance = NULL;

C++builder的dll导出类

// Enable RTTI generation for private fields
#pragma explicit_rtti fields(private) class __declspec(delphiclass) TBuffer {
private:
int wrHead, rdHead; // ...
public:
TBuffer() { }
};

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Delphi_RTTI_and_C++Builder

 c++导出函数

extern "C" __declspec(dllexport) int __stdcall fun();

静态调用

extern "C" __declspec(dllimport) int __stdcall test();

根据dll生成lib文件

cmd命令后

implib E:\MYDEV\CRT_310.lib E:\MYDEV\CRT_310.dll

implib  CRT_310.lib  CRT_310.dll

调用的工程里添加lib文件或者#pragma link "CRT_310.lib"

这里HANDLE 是typedef void *HANDLE;

typedef HANDLE APIENTRY CommOpenWithBaut(char *Port, BYTE _BaudOption);

delphi静态调用dll

function Write_DF02(ucSFI: byte; wFileLen: Word; pucData: PByte): integer; stdcall external 'my.dll';
procedure Set_Path(pchPath: PAnsiChar); stdcall external 'my.dll';

function(var age: integer; var name: double): BOOL; stdcall
const
UrlMonLib = 'URLMON.DLL'; function CreateURLMoniker; external UrlMonLib name 'CreateURLMoniker';
function readCardInfo_json():PAnsiChar;stdcall; external 'test.dll' ;
function readCardInfo_json():PAnsiChar;stdcall; external 'test.dll' name 'readCardInfo_json_myname';//函数别名

pansichar参数返回

name: array[0..50] of AnsiChar;

age:integer;

money:double;

fun(name,@age,@money);

fun(name,age,money);

用 name:TArray<AnsiChar>; 应该也可以。就是麻烦,定义和分配2行代码。

setlength(name,50);

二、delphi动态调用dll

//函数原型生命
type
Taddc = function: TStringList; stdcall;
TGetCPUID = function(CPUID: PAnsiChar): integer; stdcall; //注1
//
var
hh: THandle;
addc: Taddc;
GetId: TGetCPUID;
temp: TStringList;
i: Integer;
begin
hh := LoadLibrary('DLL.dll');
try
if hh = then
 begin
      ShowMessage('load error');
      exit;
    end;
//装载方法
@addc := GetProcAddress(hh, PChar('testStr'));
GetId := GetProcAddress(hh, pchar('GetCPUID')); //invoke
GetId();
if not (@addc = nil) then
begin
addc;
end
else
begin
RaiseLastWin32Error;
end;
finally
FreeLibrary(hh);
end;

delphi Berlin版本 如何给PAnsiChar赋值?

StrCopy(value, PAnsiChar(AnsiString(kvalue)));

因为是UnicodeString,所以必须先进行AnsiString转换。

#define DLLEXPORT_API extern "C" _declspec(dllexport)

dll函数导出 改名别名

delphi太简单了

procedure a(); stdcall;
begin end; exports
a name '@$xp$20Controls@TAnchorKind';
function InitCommExt(): Integer; stdcall;

c++builder找不到方法

http://toby.logdown.com/posts/220527/c-builder-define-dll-export-function-names-using-def-file

DetectCard(ComHandle: THANDLE; var CardType: Byte; var CardInfor: Byte): Integer; stdcall; external 'aa.dll';

dll调用,引用地址

var
CardType: Byte;
CardInfor: Byte;
rec := DetectCard(CHandle, CardType, CardInfor);

c#调用dll的函数别名

[DllImport("test.dll", EntryPoint= "myfun")]  public static extern int myfun_KP(StringBuilder connstr);//

FillChar( readdata, SizeOf( readdata ), 0 );

c++builder delphi 调用dll dll编写的更多相关文章

  1. Delphi 调用C# DLL(包含委托)

    例子 C# Dll: using System; using System.Collections.Generic; using System.Text; using System.Diagnosti ...

  2. delphi 调用c#dll

    public interface iProduct { string Buy(); } [ClassInterface(ClassInterfaceType.None)] public class P ...

  3. Delphi调用C# 编写dll动态库

    Delphi调用C# 编写dll动态库 编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目WZPayDll, using System.Runtime.InteropServices ...

  4. Delphi 调用C# 编写的DLL方法

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

  5. Delphi 7调用C语言编写的DLL

    DLL一定是要C语言导出的符号,也就是extern “C”. 当然,我们都知道DLL调用分为动态调用和静态调用. 动态调用的一般思想为,先LoadLibrary那个你想加载的DLL,然后通过GetPr ...

  6. Delphi 使用之dll文件生成与调用

    DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...

  7. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

    Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...

  8. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  9. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记

    前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...

随机推荐

  1. ARM汇编指令集4

    协处理器cp15操作指令: mcr & mrc •mrc用于读取CP15中的寄存器 •mcr用于写入CP15中的寄存器   什么是协处理器? •SoC内部另一处理核心,协助主CPU实现某些功能 ...

  2. set, map, string, find(), string name[100],等的混合

    Unrequited Love Time Limit: 16 Seconds      Memory Limit: 131072 KB There are n single boys and m si ...

  3. IE6&IE7 bug

    IE6 Bugs 1 .不支持用样式设置 <abbr> 元素 2 .不支持以连字符和下划线开头的 class 和 ID 名 3 . <select> 元素总是出现在堆叠最上面, ...

  4. 有效处理Java异常三原则

    Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? ...

  5. WPS烦人问题

    [原]彻底解决WPS弹出热点广告.WPS购物图标的办法 搜索wpsnotify.exe,删除并新建同名文件. 搜索updateself.exe,删除并新建同名文件. 关闭我的WPS,搜索khomepa ...

  6. Ant入门之引用外部jar文件

    笔者在java项目开发中经常遇到引用外部Jar包的情况,使用ant打包过程中需要对其引用.现在此简单记忆以飨来者. 此处引用Log4j,具体程序HelloLog4j.java: package oat ...

  7. volatile 续

    上次的问题在看了一篇博客后有了点理解了 博文地址为 http://www.cnblogs.com/dolphin0520/p/3920373.html 按照文章中写的,在并发编程中,我们通常会遇到以下 ...

  8. kali视频(1-5)

    第二周 kali视频(1-5) 1.kali安装 2.基本配置 vmtools安装过程. 3.安全渗透测试一般流程 4.信息搜集之GoogleHack 5.信息搜集之目标获取 1.kali安装 直接在 ...

  9. SOA的挑战:实体集合【转】

    SOA的挑战:实体集合 发布日期 : 2005-11-06 |  更新日期 : 2005-11-06 Ramkumar Kothandaraman 微软公司 适用于: Microsoft® Visua ...

  10. 在vue项目中正确的引入jquery和bootstrap

    <script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...