-
Asp.net怎么调用dll里面的函数?
2016-10-03 19:51:07dll使用C++写的,dll是打包的算法处理。 以最简单的加法为例 int byjTestFunc_Add(int a, int b) { int u8Temp = 0; u8Temp = a + b;...asp.net 应该怎么去调用这个算法去运算并返回运算的值呢? -
VC调用dll里面的回调函数
2014-08-01 03:16:44我调用一个dll里面的回调函数,原型说明如下,请问怎么调用?感觉原型有问题,和我看的资料不一样 void (WINAPI SetCallback)(long caller,long userdata); 设置回调,回调函数将接收终端传过来的数据和消息 回... -
C#如何动态调用VB编译的dll里的函数
2016-03-10 07:20:22有一个VB的工程项目,里面有很多类,每个类里都有相同的函数; 比如 a工程;类模块里有 b类,c类;而b类和c类都有相同的函数d; 我怎么在C#里动态调用b类的d函数呢? 因为是动态调用,所以不能是直接引用dll,再... -
怎么通过函数名直接调用自己的win32DLL里的函数
2012-11-01 15:06:45做了一个win32DLL,想调用里面的函数:void func() 看网上一般都是建一个win32 console的工程,然后类似下面这样通过win32的宏用函数指针调用: int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hDllInst; ... -
MFC 怎么 调用dll文件里带结构体的函数 求大神
2013-11-27 16:50:05cpp里的函数 CheckDeviceInfo @5 .def文件里的导出函数 以上是MFCDLLproject里面的 HMODULE m_hModule; m_hModule=::LoadLibraryA(".\\ControlV_A.dll"); //m_hModule=::LoadLibraryA...typedef struct S_DeviceINFO
{
CString mName[50];
CString mCaption[50];
CString mDeviceID[50];
CString mManufacturer[50];
}S_DeviceInfo;
extern "C" bool _stdcall EXPORT CheckDeviceInfo(CString mCmd,S_DeviceInfo &info);结构体和函数声明
extern "C" bool PASCAL EXPORT CheckDeviceInfo(CString mCmd,S_DeviceInfo &info)
{for(int i=0;i++;i<50)
{
info.mName[i]="UUU";
info.mCaption[i]="UUU";
info.mDeviceID[i]="UUU";
info.mManufacturer[i]="UUU";
}
}
cpp里的函数
CheckDeviceInfo @5
.def文件里的导出函数
以上是MFCDLLproject里面的
HMODULE m_hModule;
m_hModule=::LoadLibraryA(".\\ControlV_A.dll");
//m_hModule=::LoadLibraryA("MicTestdll.dll");
if(m_hModule==NULL)
{
AfxMessageBox("fail");
return;
}typedef bool (__stdcall* GetDeviceInfo)(CString,S_DeviceInfo &);
GetDeviceInfo pInfo;
pInfo=(GetDeviceInfo)::GetProcAddress(m_hModule,"CheckDeviceInfo");
S_DeviceInfo info;
pInfo("hello",info);其他4个函数都有获取到函数地址,唯一没有获取到的是传结构体的 ,我怀疑是不是传结构体有问题,我的dll里面结构体的申明和调用的project里面的申明一模一样 求大神帮忙解答。。。
-
C#调用C++ dll的API怎么去调用他的函数啊?
2019-05-30 02:29:23``` c++ 给我的文档里面写的 typedef void* IPC_DEV_HANDLE; ...typedef void** PIPC_DEV_HANDLE;...bsFlag [in] 参数,可能... dll文件名 是 BSIPC.DLL 跪求大神帮帮忙 告诉我下我该怎么写,没做过引入外部dll.... -
JNA 调用 dll 返回函数结构体怎么解决
2017-09-07 09:38:15现在有个一参数为结构体 里面放的是多个回调函数 typedef struct { void ( *Es_RecvFromClient )( const void *sender,uchar receid); void ( *Es_SendToClient )( const void *sender,uchar receid); } 这种... -
c#怎么调用vc的DLL里的回调函数?
2012-04-18 17:13:30设置设备状态变化、或者有接收到事件、告警时的回调函数。 参数: fStatusEventCallBack:回调用函数,声明原型为:typedef LONG(CALLBACK *StatusEventCallBack)(LONG lUser,LONG nStateCode,char *pResponse,... -
请教个小问题。exe怎么传递类指针给DLL,DLL要调用exe里的函数
2016-02-12 22:20:42exe先加载DLL,然后呢? DLL里面要声明exe的函数名称?我不懂,具体怎么做??? 请写一个例子给我,谢谢了 -
C#调用MFCdll里面的回调函数
2017-12-12 10:08:37具体调用的函数如下  C#代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data... -
cvi调用其他exe_怎么用exe调用另一个exe里函数,像调用dll那样
2021-01-13 00:14:41#1得分:5回复于:2010-07-06 23:12:07以下代码来自看雪论坛[code]前两天想搞出一个游戏的封包解密函数,又懒怕还原成高级语言想直接调用他EXE内部的解密函数,本来记得PEDIY的有篇文章是增加节来导出内部函数的,...#1
得分:5
回复于:
2010-07-06 23:12:07
以下代码来自看雪论坛
[code]
前两天想搞出一个游戏的封包解密函数,又懒怕还原成高级语言 想直接调用他EXE内部的解密函数,
本来记得PEDIY的有篇文章是增加节来导出内部函数的,但是找不到那篇文章了;所以就开始自己尝试一下,现在以自己写的一个EXE为类型
先写一个EXE程序
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure DoPub;//内部函数 等待导出
begin
MessageBox(0, 'Test', 'Test', MB_OK);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageBox(0, 'Test', 'Test', MB_OK);
end;
end.
上面编译成成 hook32.exe 名字为Hook没什么意思 只是个人习惯 跟钩子没关联 呵呵
然后用OD载入我们的程序 下段BP MessageBoxA 按 按钮运行 断下 执行到返回
00456498 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0045649A |. 68 AC644500 PUSH hook32.004564AC ; |Title = "Test"
0045649F |. 68 AC644500 PUSH hook32.004564AC ; |Text = "Test"
004564A4 |. 6A 00 PUSH 0 ; |hOwner = NULL
004564A6 |. E8 A509FBFF CALL ; \MessageBoxA
004564AB \. C3 RETN
得知我们的内部函数地址为 00456498 这里我就偷懒啦 用LORDPE的文件计算器
计算 RVA=00056498
Offset=00055898
好了现在来修改导出表,再次偷懒 不加新节啦,WinHex打开文件 直接找个程序空白的地方
我在偏移64B90找到大片0字节区域 好就在这里开刀啦
这里我们先来熟悉一下导出表结构
Characteristics 4字节
TimeDateStamp 4字节
MajorVersion 2字节
MinorVersion 2字节
Name 4字节
Base 4字节
NumberOfFunctions 4字节 你要导出函数的个数
NumberOfNames 4字节 你要导出函数名称的个数
AddressOfFunctions 4字节 //函数地址
AddressOfNames 4字节 //函数名地址
AddressOfNameOrdinals 4字节 //函数名顺序地址
注意上面都是保存RVA的值哦 千万别搞错了
好了 让我们来根据上面结构来在偏移64B90 处构造导出表
我们的模块名字是 hook32.exe 到出名字就随便起个吧 我这里叫 _W
构建如下
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00064B90 00 00 00 00 00 00 00 00 00 00 00 00 C2 E7 06 00 ............络..
00064BA0 01 00 00 00 01 00 00 00 01 00 00 00 B8 E7 06 00 ............哥..
00064BB0 BC E7 06 00 C0 E7 06 00 98 64 05 00 CD E7 06 00 肩..犁..榙..顽..
00064BC0 00 00 68 6F 6F 6B 33 32 2E 65 78 65 00 5F 57 00 ..hook32.exe._W.
也就是
->Export Table
Characteristics: 0x00000000
TimeDateStamp: 0x00000000 (GMT: Thu Jan 01 00:00:00 1970)
MajorVersion: 0x0000
MinorVersion: 0x0000 -> 0.00
Name: 0x0006E7C2 ("hook32.exe")
Base: 0x00000001
NumberOfFunctions: 0x00000001
NumberOfNames: 0x00000001
AddressOfFunctions: 0x0006E7B8
AddressOfNames: 0x0006E7BC
AddressOfNameOrdinals: 0x0006E7C0
Ordinal RVA Symbol Name
------- ---------- ----------------------------------
0x0001 0x00056498 "_W"
bujin888
2008-06-22, 02:52
导出表做好后 就让我们把导出表更新到PE结构里面去吧
用OD载入程序 ALT+M打开内存 选择 hook32 PE文件头那行 进入PE文件头数据窗口
看到
0040003C 00010000 DD 00000100 ; Offset to PE signature
这句话的意思说 PE文件头在偏移100处
我们来到偏移100处
00400100 50 45 00 00>ASCII "PE" ; PE signature (PE)
00400104 4C01 DW 014C ; Machine = IMAGE_FILE_MACHINE_I386
00400106 0900 DW 0009 ; NumberOfSections = 9
00400108 4E255D48 DD 485D254E ; TimeDateStamp = 485D254E
0040010C 00000000 DD 00000000 ; PointerToSymbolTable = 0
00400110 00000000 DD 00000000 ; NumberOfSymbols = 0
00400114 E000 DW 00E0 ; SizeOfOptionalHeader = E0 (224.)
00400116 8E81 DW 818E ; Characteristics = EXECUTABLE_IMAGE|32BIT_MACHINE|LINE_NUMS_STRIPPED|LOCAL_SYMS_STRIPPED|BYTES_REVERSED_LO|BYTES_REVERSED_HI
00400118 0B01 DW 010B ; MagicNumber = PE32
0040011A 02 DB 02 ; MajorLinkerVersion = 2
0040011B 19 DB 19 ; MinorLinkerVersion = 19 (25.)
0040011C 00600500 DD 00056000 ; SizeOfCode = 56000 (352256.)
00400120 00E80000 DD 0000E800 ; SizeOfInitializedData = E800 (59392.)
00400124 00000000 DD 00000000 ; SizeOfUninitializedData = 0
00400128 1C770500 DD 0005771C ; AddressOfEntryPoint = 5771C
0040012C 00100000 DD 00001000 ; BaseOfCode = 1000
00400130 00800500 DD 00058000 ; BaseOfData = 58000
00400134 00004000 DD 00400000 ; ImageBase = 400000
00400138 00100000 DD 00001000 ; SectionAlignment = 1000
0040013C 00020000 DD 00000200 ; FileAlignment = 200
00400140 0400 DW 0004 ; MajorOSVersion = 4
00400142 0000 DW 0000 ; MinorOSVersion = 0
00400144 0000 DW 0000 ; MajorImageVersion = 0
00400146 0000 DW 0000 ; MinorImageVersion = 0
00400148 0400 DW 0004 ; MajorSubsystemVersion = 4
0040014A 0000 DW 0000 ; MinorSubsystemVersion = 0
0040014C 00000000 DD 00000000 ; Reserved
00400150 00F00600 DD 0006F000 ; SizeOfImage = 6F000 (454656.)
00400154 00040000 DD 00000400 ; SizeOfHeaders = 400 (1024.)
00400158 00000000 DD 00000000 ; CheckSum = 0
0040015C 0200 DW 0002 ; Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
0040015E 0000 DW 0000 ; DLLCharacteristics = 0
00400160 00001000 DD 00100000 ; SizeOfStackReserve = 100000 (1048576.)
00400164 00400000 DD 00004000 ; SizeOfStackCommit = 4000 (16384.)
00400168 00001000 DD 00100000 ; SizeOfHeapReserve = 100000 (1048576.)
0040016C 00100000 DD 00001000 ; SizeOfHeapCommit = 1000 (4096.)
00400170 00000000 DD 00000000 ; LoaderFlags = 0
00400174 10000000 DD 00000010 ; NumberOfRvaAndSizes = 10 (16.)
00400178 00000000 DD 00000000 ; Export Table address = 0
0040017C 00000000 DD 00000000 ; Export Table size = 0
00400180 00F00500 DD 0005F000 ; Import Table address = 5F000
00400184 94240000 DD 00002494 ; Import Table size = 2494 (9364.)
00400188 00A00600 DD 0006A000 ; Resource Table address = 6A000
0040018C 00480000 DD 00004800 ; Resource Table size = 4800 (18432.)
00400190 00000000 DD 00000000 ; Exception Table address = 0
00400194 00000000 DD 00000000 ; Exception Table size = 0
00400198 00000000 DD 00000000 ; Certificate File pointer = 0
0040019C 00000000 DD 00000000 ; Certificate Table size = 0
004001A0 00400600 DD 00064000 ; Relocation Table address = 64000
004001A4 345B0000 DD 00005B34 ; Relocation Table size = 5B34 (23348.)
004001A8 00000000 DD 00000000 ; Debug Data address = 0
004001AC 00000000 DD 00000000 ; Debug Data size = 0
004001B0 00000000 DD 00000000 ; Architecture Data address = 0
004001B4 00000000 DD 00000000 ; Architecture Data size = 0
文件头结构有很多 我们只要 关心 这两行就可以
00400178 00000000 DD 00000000 ; Export Table address = 0
0040017C 00000000 DD 00000000 ; Export Table size = 0
这里是保存 导出表的地址和大小的地方
用OD相对偏移计算如下
$+178 00000000 DD 00000000 ; Export Table address = 0
$+17C 00000000 DD 00000000 ; Export Table size = 0
也就是说 导出表地址和长度保存在文件偏移 178 和17C处
用winhex打开文件 ALT+G 来到偏移178处 将原来我们构造导出表的地址00064B90 转换为RVA为6E790
偏移178处4个字节改成 90 E7 06 00 数了一下我们的导出表共有64个字节16进制为0x40
与是偏移178处4个字节改成40 00 00 00 到这里就一切OK了 保存好修改好的PE结构 然后我们写个程序来调用一下这个到处函数看看
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
doSth:procedure;
pfun:DWORD;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
DLLModule:DWORD;
begin
DLLModule := LoadLibrary('hook32.exe');
doSth:= GetProcAddress(DLLModule,'_W'); //取得API地址
doSth;
end;
end.
试验结果 HOOK32.EXE的内部函数被成功调用了!
[/code]
-
.net客户端怎么调用DLL文件里面的代码
2009-07-13 10:10:00我现在有这样一个DLL文件TianLe....方法是:在项目名称上点击右键,选择“添加引用”,然后通过浏览把你的TianLe.TianLeWeb.dll添加进来,就可以在整个项目中调用TianLe.TianLeWeb.dll 中的函数,方法,类了。我现在有这样一个DLL文件TianLe.TianLeWeb.dll
<%@ Page language="c#" Codebehind="left.aspx.cs" AutoEventWireup="false" Inherits="TianLe.TianLeWeb.admin.left" %>
这样为什么调用不了?最佳答案
要引用其它的Dll文件,应该通过添加引用来实现。方法是:在项目名称上点击右键,选择“添加引用”,然后通过浏览把你的TianLe.TianLeWeb.dll添加进来,就可以在整个项目中调用TianLe.TianLeWeb.dll 中的函数,方法,类了。
-
C# 怎么调用C++写的DLL函数里带着省略号参数
2012-08-23 16:44:59这是C++写的函数格式, extern __declspec(dllexport) void aa(int num,...) 现在请问下,这个要在C#里边该怎么调用呢。 -
用rundll32.exe调用一个dll文件里的函数 怎么传递参数?
2015-07-08 10:55:14我想练习 编写dll文件,实现对里边函数的调用。 extern "C" __declspec(dllexport)int sub(int q) { char c[25]; int d=q-4; itoa(d,c,10); MessageBox(0,c, "a-b;结果:", 1); return 0; } ... -
VBA调用 setupapi.dll里面SetupDiEnumDeviceInterfaces函数在office365没有返回
2019-10-24 16:32:42VBA在32位的office2010上面没问题, 已经加了“PtrSafe” 换到win10 office365 SetupDiEnumDeviceInterfaces这个函数无法读到信息。 谁知道怎么解决啊?先谢谢大神了。 -
C++ DLL方式调用函数转为 C# 时,参数该怎么定义
2019-01-18 13:15:57MF_ReadSNR是调用DLL方法来读取卡片第一扇区的编码(看做ID),这个C++函数里他用指针的方法来调用,但是我们想用C#方法进行开发,不知道cSNRString这个参数该怎么定义才能调用这个函数? 希望有高手解答 +Q... -
QT之解决dll调用时函数重命名(函数名被编译器改变的问题)
2016-12-06 11:43:31在调用店家给的dll文件时(显式调用),总是发现没反应,后来借用depends打开dll查看,看下图,发现dll里面的函数都被编译器加上了前缀和后缀,上网查了一下,是什么重载之类的说法,我就在想怎么把前缀给去掉,可是...这几天做一个项目,需要用到一个X宝上买的读卡器,在调用店家给的dll文件时(显式调用),总是发现没反应,后来借用depends打开dll查看,看下图
,发现dll里面的函数都被编译器加上了前缀和后缀,上网查了一下,是什么重载之类的说法,我就在想怎么把前缀给去掉,可是找了好久都没找到什么方法,也去贴吧和相关的QQ群去询问,未果!昨天下班后我就自己在加班,后来发现使用显示调用,直接resolve改变后的函数名酒可以调用了,下图
本来的函数名是CloseReader,改变后的是?CloseReader@@YAHXZ,直接resolve?CloseReader@@YAHXZ就能用了,我只用了显示调用这种方法,其他的方法大家有时间可以去试试,我还要做别的,暂时没时间,大家有问题,参考我的看能不能成功,有问题留言,一起进步
-
VB如何调用dll函数
2016-07-14 10:53:12假如我有个DLL,名为 asdfg.dll 它里面有一个函数 zxc(参数1,参数2) 我要用这个函数,该怎么写? 1.在工程-引用中将asdfg.dll引用过来 2.dim AAA as asdfg 'asdfg是类模块的名称 Private Sub Form_Load() dim ... -
c语言怎么调用dll文件
2013-03-06 15:39:09dll调用: (1)一般动态链接库有头文件...使用的时候需要引用的文件中加上#pragma comment (lib, "xxx.lib")就可以,然后可以调用dll里面函数等 (2)如果只有lib,h文件,那这是静态链接库,同上面一样 -
现在有dll,lib,h文件,怎么用java调用里面的函数?
2012-08-09 11:29:39现在有一个IC读写器,厂家提供了.dll,.lib,.h文件以及API,怎么用java调用里面的函数?网上搜索了一下,说什么JNI,谁能具体点不? -
cadlib不用dll怎么直接调用里面的函数_视频下集:1小时学会!用C++模板快速编写Windows窗口图形界面程序,...
2020-11-24 14:57:43今日介绍使用模板,来快速创建Windows窗口图形界面程序...模板的创建方法是上次介绍的,参见:视频:1小时学会用C++编写Windows窗口图形界面程序,不用MFC模板源代码下载链接(长按复制到浏览器,支持VC2010、VC6打开):... -
java调用dll时得到一个函数的输出参数值
2009-06-15 13:34:50在dll文件里有一个函数,这个函数有一个输入参数,一个输出参数,然后还有一个返回值,现在我要用java调用这个函数的输出参数,应该怎么调用, 我现在在调用这个函数的时候得到的是这个函数的返回值而不是输出参数... -
Java小知识:怎么调用dll&so动态库?
2018-12-04 17:17:12使用Java调用dll&amp;amp;amp;amp;amp;amp;so动态库的函数 *应用背景:项目中需要调用一项其他平台提供的服务,是一位C语言老大哥写的,可牛啦。但是因为一些特殊原因导致不能通过API调用的方式实现,最终... -
VC++、DLL、虚函数、调用约定
2015-08-23 11:08:16平台只有一个在跑,而游戏是N个,工程B(平台)的mc被赋值成工程C(游戏)的对象,通过工程A的接口,mc可以调用工程C(游戏)里的函数(接口的实现)。 问题: 我在开发一个新游戏时,发现工程A(接口)类AI的接口... -
MFC调用带有结构体形参的dll库, 参数传入函数里面获取的值全部错误<为系统默认值>
2017-11-10 10:02:49这个bug找了将近一天,上层调用的dll库里面的函数,传入的结构体结构调试发现参数全部是系统默认的了,不是我传入的参数,void SaveEncPara(CARD_PARA stPara, int card);这个函数是dll库我封装的,结果上层传入... -
关于python调用C++所形成的dll文件中的以指针为返回值的函数
2021-01-18 10:27:55作为一个编程小白,最近在做毕业设计需要用到前人写好的C++程序,而且这个C++程序里的函数是以数组指针作为返回值,而我用的是python,一时之间竟然不知道该怎么帮。 在找寻了一些资料后找到了下面的解决方法。 #... -
vb 问题,我有两个dll同名不同版(里面的一个函数名不同),我想根据需要来调用其中的一个,怎么实现?
2018-10-18 02:43:33dll是注册后直接调用的 Private Sub Form_Load() Me.Show Dim myt As New remote.Class1 '声明 ...c = myt.test(a, b) '另一个dll中的函数名为test1() Print c End Sub 本的新手求大神帮帮! -
非托管DLL内的函数 参数如何写?
2015-06-29 14:00:17非托管DLL内的函数 HANDLE myfunction (char FileName[][512], int FileCount) 这个函数如何在C#里怎么写函数签名,如何调用? -
C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
2009-10-21 14:08:00我最近在做C#调用C++写的dll ,现在出现一个问题,就是c++的函数里有这样一个参数 char* argv[]请问,C#里,我该怎么样传参数给他!__declspec(dllimport) int PlayerDoOpen(HWND hOwner,LPRECT lpRect,int argc,... -
(VC++)DLL设置钩子函数,如何让回调函数能修改DLL中的全局变量
2018-03-13 16:30:26发现在钩子函数HOOK的回调函数中调用到的DLL全局变量都是空值(吓尿了),也就是说从外部传入的值虽然保存在DLL的全局变量里,但是钩子函数的回调函数根本获取不到!!!可是需要这些变量跟MFC程序进行消息交互呀!!...