- 浏览: 1998625 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
自己实现的第一个linux中dll的调用
1. 编译dll:
g++ -shared -lc -o strcase.dll lowcase.cpp uppercase.cpp
如果要加入调试信息:(加上 -g选项)
g++ -shared -lc -o strcase.dll lowcase.cpp uppercase.cpp -g
编译c++ dll注意函数之前需要加上 extern "C",否则在dlsym函数调用的时候可能会找不到函数
.
2. 编译exe:
g++ -ldl -o strcase.exe main.cpp
如果要加入调试信息:(加上 -g选项)
g++ -ldl -o strcase.exe main.cpp -g
3. gdb调试
gdb strcase.exe
调试时需要在编译的时候加上(-g)选项
gdb命令:
b 设置断点,例如:
b main #表示跳到main函数
b main.cpp: 56 #56表示行号
l 打印当前的执行代码附近的10行
p 打印变量szMsg的值
p szMsg
n 执行下一行(单步执行, 类似VC中的F10)
s 进入函数(类似VC中的F10)
r 开始执行
//main.cpp
#include <iostream>
#include <stdlib.h>
#include <dlfcn.h>
using namespace std;
#define TRUE 1
#define FALSE 0
typedef int BOOL;
typedef void (*PFUN_STRING)(char* pszStr);
BOOL UseDll(char* szMsg);
int main()
{
char szMsg[] = "Hello, andylin!";
//调用dll
UseDll(szMsg);
return 0;
}
BOOL UseDll(char* szMsg)
{
void* hDll = NULL;
char* szDllErr = NULL;
PFUN_STRING pfunUpper = NULL;
PFUN_STRING pfunLower = NULL;
if (NULL == szMsg)
{
return FALSE;
}
cout << "The Origin String:" << szMsg << endl;
//open dll
hDll = dlopen("./strcase.dll", RTLD_LAZY);
szDllErr = dlerror();
if (szDllErr)
{
cout << "open uppercase.dll error! err info:" << szDllErr << endl;
return FALSE;
}
//find the function
pfunUpper = (PFUN_STRING)dlsym(hDll, "StrUpper");
szDllErr = dlerror();
if (szDllErr)
{
cout << "find function StrUpper Error! err info:" << szDllErr << endl;
return FALSE;
}
(*pfunUpper)(szMsg);
cout << "after StrUpper string:" << szMsg << endl;
//call StrLower
pfunLower = (PFUN_STRING)dlsym(hDll, "StrLower");
szDllErr = dlerror();
if (szDllErr)
{
cout << "find function StrLower Error! err info:" << szDllErr << endl;
return FALSE;
}
(* pfunLower)(szMsg);
cout << "after StrLower string:" << szMsg << endl;
//close handle
int nRet = dlclose(hDll);
szDllErr = dlerror();
cout << "close dll info:" << szDllErr << endl;
}
//lowcase.cpp
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
extern "C" void StrLower(char* pszStr)
{
if (NULL == pszStr)
{
return;
}
int nLen = 0;
int i = 0;
nLen = strlen(pszStr);
for (i = 0; i < nLen; i++)
{
if ( (pszStr[i] >= 'A') && (pszStr[i] <= 'Z') )
{
pszStr[i] += 'a' - 'A';
}
}
}
//uppercase.cpp
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
extern "C" void StrUpper(char* pszStr)
{
if (NULL == pszStr)
{
return;
}
int nLen = 0;
int i = 0;
nLen = strlen(pszStr);
for (i = 0; i < nLen; i++)
{
if ( (pszStr[i] >= 'a') && (pszStr[i] <= 'z') )
{
pszStr[i] -= 'a' - 'A';
}
}
}
评论
3 楼
七猫
2010-02-24
印像中一般会有-fpic
2 楼
mikeandmore
2010-02-23
weibei 写道
弱弱的问一句,linux中有dll吗?
应该叫share object
1 楼
weibei
2010-02-23
弱弱的问一句,linux中有dll吗?
发表评论
-
多机器执行ssh脚本
2012-08-30 18:12 2177#!/bin/bash Usage() { ... -
Berkeley DB 使用经验总结
2012-08-27 14:41 3022作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1470前言 UNIX/LINUX平台下的数据库种类非常多 ... -
shell中双引号的误用
2011-05-12 15:02 1125for i in "$LIST" ... -
shell for循环
2011-04-06 15:36 903for i in "1 2 3";do e ... -
shell技巧 除法
2011-03-07 11:34 19126shell计算中使用除法,基本默认上都是整除。 比如: ... -
.bash_profile 文件修改之后不执行
2011-02-16 11:21 1873重新登录 不可能不好用的 除非你是从一个用户su oralc ... -
SecureCRT中文显示乱码的解决方法
2011-02-12 11:38 1292最近开始用SecureCRT登陆linux系统,由于是新手,很 ... -
让putty显示中文
2011-02-11 14:43 1373对于经常在windows下远程ssh到linux的用户而言,p ... -
Linux文件类型全解析
2011-01-04 15:13 1356Linux文件类型全解析 ... -
Linux进程状态解析之T、Z、X
2011-01-04 15:09 1750摘要: Linux系统中进程有很多种 ... -
Linux进程状态解析之R、S、D
2011-01-04 14:54 4830摘要: Linu ... -
shell获取参数
2010-12-31 15:29 4128#!/bin/bash Usage() { ... -
Shell实现cgi接口示例
2010-12-30 14:59 1948ls -l /var/www/cgi-bin/ -rwxrw ... -
shell数组
2010-12-29 16:48 1247shell数组 Bash中还可以使用数 ... -
shell 自动化处理
2010-12-29 15:52 992#!/bin/bash sudo yum instal ... -
Linux用户添加sudoer
2010-12-29 11:37 24872使用sudo可以在以非root用户登录时临时获得root权限, ... -
lsof:一个功能强大的命令
2010-12-24 16:30 1316lsof:一个功能强大的命令 lsof命令的原始功能 ... -
linux 的库操作命令 ar和nm
2010-12-22 20:31 1362当我们的程序中有经 ... -
LINUX查看硬件配置 命令
2010-12-21 18:55 1015常用命令整理如下: 查看主板的序列号: dmidec ...
相关推荐
亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。
本资料的内容分两部分:第一部分是QT在windows上DLL的导出和调用;第二部分是QT在linux上DLL的导出和调用。
篇内容分两部分:第一部分是 QT在 windows 上 DLL的导出和调用; 第二部分是 QT在 linux 上 DLL(os)的导出和调用; /////////////////////////////////////////////////////////////////////////////////////...
那么你在VC中调用一个MinGW的dll时你就会发现,问题变得很棘手。def的函数名书写规则和你要调用dll的函数约定有关,和dll里的前后缀无关。切记!) 另外, 在使用dll里的函数的时候,需要一份.h文件,对调用的函数...
前一段时间接了个项目,需要用到第三方提供的C#编写的dll,本身项目是java语言,所以便有了下面这篇文章,本文给大家介绍了关于java中如何使用jna调用c#中dll的相关资料,文中通过示例代码介绍的非常详细,需要的...
如果选用的开发语言为C/C++则可以选用第一种方式直接将源码集成到项目代码中,这样不仅调试方便,而且效率更高,省去了dll的编译与调用解析过程。但是由于在GIS二次开发中C#语言的认知和使用更为方便,因此为将两种...
dll的一个实例。 OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+...
3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开...
dll的一个实例。 OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+...
dll的一个实例。 OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+...
dll的一个实例。 OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+...
dll的一个实例。 OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+...
第1章 文本 1 引言 1 1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐...
请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户. 3) 每个服务器为客户服务时, 通常是长期的, 会...
用C#写的,github上我也放了源...这个鼠标点击调用的windows的dll,算是第二级别的,可以全局范围内生效,最底层的驱动级别的模拟需要加载一个驱动程序,然后直接模拟硬件信号。这个后续做。dll全局级别的已经够用。
这个参数包括了文件描述,表,缓冲,标志位等,它在所有gSOAP函数中都是第一个参数。 gSOAP运行环境实例是一个struct soap类型的变量。当客户端程序访问远程方法前或当服务端程序能够接收一个请求前,必须先将这个...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
)专为.NET设计的一门语言,号称“C/C++家族中第一种面向组件的语言”。很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》...
种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关 联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是 一样的。 这个程序里我们实现了两类窗口打开的方式,一个是自身...
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...