当前位置:首页 » 股票涨停 » 股票软件中使用dll函数

股票软件中使用dll函数

发布时间: 2021-09-21 23:40:07

❶ DLL函数查看器,支持64位DLL查看顺便问下如何调用64位DLL

这个问题最终是这样解决的:我使用WDF重新编写了驱动程序,在32bit平台上调试通过之后,更换到64bit平台上,很容易就生成了64bit的驱动文件,在64bit平台上,完全可以使用32bit的DLL和32bit的进程。因此我的软件不用做任何改动,在64bit平台上直接使用。

因为我对COM技术不是很熟悉,所以我使用了一种曲线救国的方式。
总结:
32bit的进程是可以调用64bit的驱动(sys文件)的;但是32bit的进程不能调用64bit的进程,例如我的32bit的VB软件就不能够调用64bit的DLL。

❷ 如何调用dll文件中的函数

第一种:动态链接主要是利用LoadLibrary、GetProcAddress、FreeLibrary这三个api。

LoadLibrary
HINSTANCE LoadLibrary(LPCTSTR lpLibFileName);
The LoadLibrary function maps the specified executable mole into the address space of the calling process.
这个函数就是映射可执行模块的地址到调用这个函数的进程中,以便这个进程能够调用可执行模块中的函数。
输入参数: lpLibFileName 指向一个可执行模块的名字的字符串,在这里也就是指向"sqlite3.dll"的字符指针,你也可以加路径,请注意要用back slashes(\)代替forward slashes(/)。具体的请参看MSDN。
返回值:成功的话就返回这个可执行模块的句柄(下面要用),否则返回NULL。
GetProcAddress
FARPROC GetProcAddress( HMODULE hMole, LPCSTR lpProcName );
The GetProcAddress function returns the address of the specified exported dynamic-link library (DLL) function.
这个函数返回动态链接库(DLL)中指定函数的地址,为了下面可以调用这个指定的函数。
输入参数:
hMole 就是调用LoadLibrary得到的句柄。
lpProcName字符指针,指向函数名(这个函数必须是dll中定义的函数)。
返回值:函数指针,是对应上面函数名的函数的入口地址。
FreeLibrary
BOOL FreeLibrary( HMODULE hLibMole );
The FreeLibrary function decrements the reference count of the loaded dynamic-link library (DLL) mole. When the reference count reaches zero, the mole is unmapped from the address space of the calling process and the handle is no longer valid.
这个函数就是释放我们load的dll模块。当有多次load的时候,我们一次释放一个。
输入参数:就是上面调用LoadLibrary得到的句柄。
返回值:失败为0,否则为非0
下面给出一个小例子:
typedef int(*SQLITE3_OPEN)(const char *filename,sqlite3 **ppdb);
SQLITE3_OPEN sqlite3_open;
HINSTANCE hdll;
int init_dll_function(void)
{
hdll=LoadLibrary("sqlite3.dll");
if(hdll==NULL){printf("Error to LoadLibrary!\n");return 1;}
sqlite3_open=(SQLITE3_OPEN)GetProcAddress(hdll,"sqlite3_open");
if(sqlite3_open==NULL){
printf("Error!\n");
return 1;
}
if(!FreeLibrary(hdll)){
return 1;
}
return 0;
}

第二种:静态(显式)链接

第一步:
这个比较简单,首先利用def文件生成一个lib文件。
如何用def文件生成一个lib文件?
到C:\Program Files\Microsoft Visual Studio\VC98\Bin下(如果VC是装在C盘的话),用CMD进入到这个目录下,然后利用lib.exe这个程序来生成所要的lib。具体的命令是:LIB /DEF:sqlite3.def /machine:IX86
。你运行了这个命令发现会有问题,因为这边默认是sqlite3.def在当前文件夹下(C:\Program Files\Microsoft Visual Studio\VC98\Bin),如果你这个文件不在这个文件夹下,那么就会出错,你只要把sqlite3.def文件复制到这个文件夹下就可以了,然后生成的lib文件也是在这个文件夹下的,你可以将它复制到你需要的地方。
注意:好像有的VC在安装的时候差什么文件,运行lib.exe命令的时候会出错,你只要找到那个差的文件并复制到当前的文件夹下,就可以了。(那个缺少文件有可能是放在其他文件夹了,你可以查找一下,我的就是这种情况)。
第二步:在程序中添加#pragma comment(lib,"sqlite3.lib") ,并且添加相应的头文件(sqlite3.h).
第三步:就在程序中调用你想要调用的函数。

❸ 如何动态调用dll中的类的函数

nniu 2011-04-06 10:46
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。
然而事实却没这么简单,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果,也许用户更新了最新版本的DLL库后,应用程序就再也不能工作了。这就是著名的DLL Hell(DLL地狱)问题。
DLL地狱问题是怎么产生的呢?看下面的例子,假设DLL有一个导出类ClassD1:
class ClassD

❹ 股票dll插件函数Ref 用C++语言怎么写

是我在论坛看到的一个例子,所以记录下来,以后用到可以参考。[DllImport("Kernel32.dll")]public static extern int LoadLibrary(String funcname);[DllImport("Kernel32.dll")]public static extern int GetProcAddress(int handle, String funcname);[DllImport("Kernel32.dll")]public static extern int FreeLibrary(int handle);//// 注意: 参数列表及返回值要与方法(test)对应..//public delegate int Invoker(string ProjName, string SchemeName, string Mile, ref double ContnMile, ref bool Reliability, ref short LineKind);static void Main(string[] args){ int handle = LoadLibrary(@"test.dll"); //要调用的类库.. if (handle != 0) { int address = GetProcAddress(handle, "test"); //指定函数名称.. if (address != 0) { Invoker invoker = (Invoker)Marshal.GetDelegateForFunctionPointer(new IntPtr(address), typeof(Invoker)); //use invoker -> demo: invoker(...); FreeLibrary(handle); } }}

❺ 在破解版软件中,如何调用dll文件

从你的说法,其实就没有完全破解(或者不切蒂),因为调用DLL就没法进行,另外,DLL是属库类文件,不能直接更名(exe)使用的,是通过程序调用其中的某些函数值。DLL文件本身并不能直接运行,加密了也不能被直接打开。你的破解补丁版本高低不是直接问题,其实就是这个破解补丁根本就不能破解该版本。

❻ 如何查看dll中的函数

可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。
现在使用W32DSM来具体说明:
1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。
它可以直接定位到该函数。
2。看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebp
mov ebp, esp
...
3。然后往下找到该函数的出口,一般函数出口有以下语句。
...
ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果
就是参数的个数。
其中参数存放的地方:
ebp+08 //第一个参数
ebp+0C //第二个参数
ebp+10 //第三个参数
ebp+14 //第四个参数
ebp+18 //第五个参数
ebp+1C //第六个参数
。。。。
-------------------------------------------
还有一种经常看到的调用方式:
sub esp,xxxx //开头部分
//函数的内容
。。。
//函数的内容
add esp,xxxx
ret //结尾部分
其中xxxx/4的结果也是参数的个数。
-------------------------------------------------
还有一种调用方式:
有于该函数比较简单,没有参数的压栈过程,
里面的
esp+04就是第一个参数
esp+08就是第二个参数
。。。
esp+xx就是第xx/4个参数
你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------
到现在位置,你应该能很清楚的看到了传递的参数的个数。至于传递的是些什么内容,还需要进一步的分析。
最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。一般都是PUSH指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,
希望对大家有点用处。

❼ 如何查看DLL中的函数

可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。
现在使用W32DSM来具体说明:
1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。
它可以直接定位到该函数。
2。看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebp
mov ebp, esp
...
3。然后往下找到该函数的出口,一般函数出口有以下语句。
...
ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果
就是参数的个数。
其中参数存放的地方:
ebp+08 //第一个参数
ebp+0C //第二个参数
ebp+10 //第三个参数
ebp+14 //第四个参数
ebp+18 //第五个参数
ebp+1C //第六个参数
。。。。
-------------------------------------------
还有一种经常看到的调用方式:
sub esp,xxxx //开头部分
//函数的内容
。。。
//函数的内容
add esp,xxxx
ret //结尾部分
其中xxxx/4的结果也是参数的个数。
-------------------------------------------------
还有一种调用方式:
有于该函数比较简单,没有参数的压栈过程,
里面的
esp+04就是第一个参数
esp+08就是第二个参数
。。。
esp+xx就是第xx/4个参数
你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------
到现在位置,你应该能很清楚的看到了传递的参数的个数。至于传递的是些什么内容,还需要进一步的分析。
最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。一般都是PUSH指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,

❽ 如何调用DLL中的函数

你要有函数原型,从函数原型知道函数名,要几个参数,什么类型的参数,返回什么类型。调用时,根据这些信息填写实际参数。

你要有这个dll的头文件,源程序要加入这个头文件。

编译时,要链接 这个 DLL 的 .lib 文件。

例如,我要使用 winmm.dll 里的 PlaySound() 函数,播放 .wma 的歌曲。

我加入它的头文件:

#include <mmsystem.h>

我要求编译时链接 .lib:

#pragma comment(lib, "winmm.lib")

调用语句:

PlaySound (TEXT("D:/abc/ge/wanfeng.wma"), NULL, SND_ASYNC | SND_NODEFAULT);

跑程序时,程序会自己使用 winmm.dll

❾ 如何根据函数名来自动调用DLL中的函数

函数的获取你是没问题了,反正就是getprocaddress。主要考虑参数

long, int, char*在32位vc编译器下实质上是一样的,都是4个字节的整数
所以关键是你要确定参数的类型,这个不能确定的话,可以说是没办法把代码写下去的。

但是光凭客户端发来的消息,事实上没办法完全确定参数的类型:虽然某些情况你可以确定这个参数一定是char*,但是你没办法确定比如 1234 这东西到底要表达的是字符串的1234还是数字的1234。如果你能解决这个问题,确定下来,你就没问题了,用相对统一的代码来处理。具体可以参考下面的例子。

也就是说,你只要保证编译后的代码没问题就可以了,源代码这边,类型再怎么诡异和不匹配也没关系。明明dll里面参数要char*,你源代码写作int,但是到最后送进去的是一个字符串地址强制转成的int,它也能正常运行。

所以一个简单的方法,假如所有函数都是只有一个参数的,那么定义成
int (*f)(int);
就ok了。它返回void也好返回char*也好,强制转一下就能正常(返回struct和返回double这一类特殊情况不行),参数要struct *也好要long也好,强制转一下就正常(struct作参数和double这一类目测要特殊处理)。

以下仅供参考:
void (*f)(int) = (void (*)(int)) GetProcAddress("aa");
f(123);

void (*f)(long) = (void (*)(long)) GetProcAddress("aa");
f(123);
是一样的。

以及
void (*f)(char*) = (void (*)(char*)) GetProcAddress("bb");
f("aaa");

void (*f)(int) = (void (*)(int)) GetProcAddress("bb");
f((int)"aaa");
是一样的

热点内容
对股票的投资分析 发布:2024-04-19 22:01:03 浏览:189
投资股票啥时候回本 发布:2024-04-19 21:56:22 浏览:689
钱龙股票软件在哪里添加股票 发布:2024-04-19 21:47:17 浏览:480
新纶科技股票绝 发布:2024-04-19 21:45:17 浏览:400
贵州皓天光电科技股票代码 发布:2024-04-19 21:44:06 浏览:988
同花顺数据库怎么看货币m2m1 发布:2024-04-19 21:18:36 浏览:707
铝合金的基金有哪些 发布:2024-04-19 20:58:18 浏览:918
股市中的图形怎么看 发布:2024-04-19 20:53:40 浏览:449
沈阳车库维修基金一平多少钱 发布:2024-04-19 20:34:10 浏览:758