博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++builder delphi 调用dll dll编写
阅读量:6349 次
发布时间:2019-06-22

本文共 2970 字,大约阅读时间需要 9 分钟。

c++builder动态调用dll

// 定义typedef int __stdcall MyFunction (int x, char *str);int rtn = 0;String dllName = "XXXX.dll";HINSTANCE hInstance = LoadLibrary(dllName.c_str());MyFunction * pMyFunction = (MyFunction*) GetProcAddress(hInstance, "rdcompany"); // 函数名称要正确if (pMyFunction == NULL){// 提示}rtn = pMyFunction(1, "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';

 

 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 = 0 then       begin       ShowMessage('load error');       exit;     end;      //装载方法      @addc := GetProcAddress(hh, PChar('testStr'));         GetId := GetProcAddress(hh, pchar('GetCPUID'));       //invoke      GetId(1);      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;beginend;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);

 

转载地址:http://eovla.baihongyu.com/

你可能感兴趣的文章
18年秋季学习总结
查看>>
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>