求用c/c++编写的dll文件。。。

海川520 2010-02-05 02:44:03
我做测试用。不会用c/c++生成dll文件,所有求大家帮忙写几个dll文件。

需求:函数中最好把c/c++特有的类型也都用上。例如,结构、指针什么的。返回值最好也加上返回类型。
最好可以写几个简单的函数。在弄几个复杂的函数。函数体不用写也行。最好有方法调用说明。
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
海川520 2010-02-06
  • 打赏
  • 举报
回复
我用vs6.0建立。是建立工程还是文件
yingzhilian2008 2010-02-05
  • 打赏
  • 举报
回复
学习来了
djlxue 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 javajc 的回复:]
def和h文件都需要自己建立么
[/Quote]
要自己建立.h 没什么好说的
def 参看MSDN 不用什么高级用法的话参看我上面的

LIBRARY "DLLNAME"

EXPORTS
FUCNAME
海川520 2010-02-05
  • 打赏
  • 举报
回复
def和h文件都需要自己建立么
qqiuzaihui 2010-02-05
  • 打赏
  • 举报
回复
以前弄过一个, 给你参考:

/***************************** ParkLib.def 文件内容 ***************************/
; ParkLib.def : Declares the module parameters for the DLL.

LIBRARY "ParkLib"
DESCRIPTION 'ParkLib Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here
MyCustomFunction





/****************************** ParkLib.h 文件内容 ***************************/
/*--------------------------------------------------------------------------
ParkLib.H header file
----------------------------------------------------------------------------*/
#ifdef __ParkStdFee
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif

/******************************************************************************
* 自定义一个数据结构用于返回
******************************************************************************/
typedef struct
{
int result;
double circle;
char* version;
}_MY_CUSTOM_;

/******************************************************************************
* 函数功能:根据输入的 [type] ,[name] 及 [product] 返回结果
* 输 入:[type] ,[name] 及 [product]
* 返 回:_MY_CUSTOM_ 结构数据
******************************************************************************/
EXPORT _MY_CUSTOM_ CALLBACK MyCustomFunction(int type, char* name, char* product);





/***************************** ParkLib.C 文件内容 ****************************/
/*---------------------------------------------------------------------------
ParkLib.C -- Easy Drawing Routine Library module
-----------------------------------------------------------------------------*/
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include "ParkLib.h"

_MY_CUSTOM_ CALLBACK MyCustomFunction(int type, char* name, char* product); //自定义函数

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}

EXPORT _MY_CUSTOM_ CALLBACK MyCustomFunction(int type, char* name, char* product)
{
_MY_CUSTOM_ myCustom;

myCustom.result = type;
myCustom.circle = type * 2;
myCustom.version = name;

return myCustom;
}



/****************************** 测试程序(MFC程序) *****************************/
1. 在头文件中声明一个结构体:
struct _MY_CUSTOM_
{
int result;
double circle;
char* version;
};

2. 创建一个结构体实例:
struct _MY_CUSTOM_ myCustom;

3. 测试代码:
HINSTANCE hInst = LoadLibrary("HmPark.dll");
typedef _MY_CUSTOM_ (CALLBACK *ADDPROC)(int type, char* name, char* product);
ADDPROC MyCustomFunction = (ADDPROC)GetProcAddress(hInst, "MyCustomFunction");

if( !MyCustomFunction )
{
MessageBox("找不到动态库");
return;
}

char* name = "my";
char* product = "custom";
int type = 5;
CString str;

try
{
myCustom = MyCustomFunction(type, name, product);
}
catch(...)
{
MessageBox("Error");
}

str.Format("\n%d, %f, %s.\n", myCustom.result, myCustom.circle, myCustom.version );
MessageBox( str );

4. 输出结果: 5, 10.000000, my.
djlxue 2010-02-05
  • 打赏
  • 举报
回复

LIBRARY "GetHardInfo"

EXPORTS
GetCPUID

配合模块定义文件,不会发生名字改编。
djlxue 2010-02-05
  • 打赏
  • 举报
回复

***************************************/
extern "C" _declspec(dllexport) void _stdcall GetCPUID(char pcCPUID[36])
{
memset(pcCPUID,0,sizeof(pcCPUID));
unsigned long s1=0,s2=0,s3=0,s4=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,eax
mov s2,ebx
mov s3,ecx
mov s4,edx
}
sprintf_s(pcCPUID,CPUID_NUM,"%08x-%08x-%08x-%08x",s1,s2,s3,s4);
return ;
}

早期代码供参考
tbwork 2010-02-05
  • 打赏
  • 举报
回复
分给我,我有一个hook程序的DLL,你要可以给你。
加我Q,发给你:542561233,写出姓名
海川520 2010-02-05
  • 打赏
  • 举报
回复
有更细点的么?关于如何定义。调用什么的。
xboy 2010-02-05
  • 打赏
  • 举报
回复
怎么编译dll,以及怎么去调用,下面这个帖子很详细,而且代码都是直接克编译的。

参考下吧:
http://www.vckbase.com/document/viewdoc/?id=271
昵称很不好取 2010-02-05
  • 打赏
  • 举报
回复
目录 I. 目录 1 II. java c/cpp互相调用实例(姊妹篇之一)——java调用c/cpp 4 一 先制作一个系统中有的DLL文件(cpp给出的sdk接口) 4 二 JNI 7 1、 编写java文件 7 2、 生成.h头文件 8 3、 用c/cpp实现这个头文件 9 三 测试 10 四 最后补充 11 III. java c/cpp互相调用实例(姊妹篇之二)——c/cpp调用java 11 一、 编写java代码 12 二、 编译java代码 12 三、 编写 C/C++ 代码 13 四、 运行exe 18 IV. Java JNI 编程进阶 18 一、 解决性能问题 18 二、 解决本机平台接口调用问题 19 三、 嵌入式开发应用(JNI小例子) 20 1、 新增一个基础类 22 2、 定义新类继承基础类 23 3、 编写调用类 23 4、 新增两个本地方法 24 5、 修改 RunMain 类 25 6、 新增一个方法处理java对象 26 7、 新增一个方法处理数组 29 8、 改写RunMain 32 四、 参考资料: 33 V. Eclipse+CDT+MinGW 进行JAVA调用C/C++ 34 一、 安装eclipse3.2。 34 二、 安装MinGW。 34 1、 下载MinGW 34 2、 安装 34 3、 安装版本 34 4、 选择安装的编译器 34 5、 选择安装路径,下一步 35 6、 等待下载软件 35 三、 MinGW的环境变量设置 35 1、 设置Path 35 2、 设置C_INCLUDE_PATH 35 3、 设置CPLUS_INCLUDE_PATH 35 四、 做一个小技巧修改 35 五、 安装CDT插件 36 1、 下载CDT插件 36 2、 安装CDT插件 36 六、 简单介绍CDT的使用吧 36 1、 新建一个C++项目 36 2、 输入New Project名字 36 3、 给项目新建一个的源文件 36 4、 接着出现文件添加的窗口,在File Name栏里面写上文件名 36 5、 编辑hello.cpp 37 6、 添加一个编译命令 37 七、 让我们开始进入真正的工作吧! 38 The Java side 38 1、 建立Java工程JavaHello,编写java类 38 2、 用命令生成头文件 38 The C side-Compiling the Library 40 1、 建立标准C工程Cpro,并生成dll文件 40 1) 将生成的头文件test_Hello.h拷贝到C工程Cpro下 40 2) 编写C类Hello.c,内容为: 40 3) 在C工程Cpro下建立hello.def文件(用于定义导出的函数),内容为: 40 4) 在C工程Cpro下建立makefile文件,内容为: 40 5) Make Targets 40 6) Make Targets视图下双击step1,在C工程Cpro下生成hello.o 文件。 41 7) Make Targets视图下双击step1,在C工程Cpro下生成hello.dll 文件。 41 2、 JAVA调用DLL 41 1) 将hello.dll拷贝到Java工程JavaHello下。 41 2) 运行Hello.java,则可以看到输出结果: 41 1) 将Hello.c改为Hello.cpp 41 2) 将makefile内容改为: 41 3) 其他的几乎都不用改变也可以。 42 评论: 42 VI. c++如何调用java程序 51 DemoMain.java内容如: 51 采用vc6++ IDE,采用JNI技术实现。 51 1、 编译时 51 2、 运行时 51 程序的关键在 53 VII. JNI 53 一、 定义 53 二、 设计目的 54 三、 书写步骤 54 1) 编写java程序:这里以HelloWorld为例。 54 2) 编译 55 3) 生成扩展名为h的头文件 55 4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。 56 5) 生成动态库 56 6) 运行程序 java HelloWorld就ok. 56 四、 调用中考虑的问题 56 1) java和c是如何互通的? 57 2) 如何将java传入的String参数转换为c的char*,然后使用? 57 3) 将c中获取的一个char*的buffer传递给java? 57 4) 不知道占用多少空间的buffer,如何传递出去呢? 58 五、 对JAVA传入数据的处理 58 1) 如果传入的是bytearray的话,作如下处理得到buffer: 58 VIII. C/C++调用JAVA类 58 一、 加载虚拟机: 59 二、 获取指定对象的类定义: 59 三、 获取要调用的方法: 59 四、 调用JAVA类方法: 60 五、 获得类属性的定义: 60 六、 数组处理: 60 七、 异常: 60 八、 多线程调用 61 Java代码 61 命令行运行:javap -s -p MyTest ,输出: 62 C代码testjava.c: 62 编译: 65 运行结果: 65

64,634

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧