找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 599|回复: 3

[编程申请]:在arx中如何使用dll

[复制链接]
发表于 2003-9-24 09:55:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
因为我要把图传到其它计算机去,要用到dll,而我不会,现在也没有资料。于是就问:在arx中如何使用dll? 就是C调用dll。
这有一个例子,能帮我写出来吗?
dll路径:C:\web.dll
有一个函数:int _stdcall connect(HTTP_CONNECTION **connection, const char *host, short port, const char *username, const char *password)
其中HTTP_CONNECTION 是一个结构体,定义如下
struct http_connection {
SOCKET socketd;
int status;
char *host;
struct sockaddr_in address;
int persistent;
HTTP_AUTH_INFO *auth_info;
};
(其它定义略)
问题:我怎么调用这个函数?比如在head.h 中如何声明,head.cpp中如何使用?
静态如何?
动态如何?
谢谢!

声明:
#define DllImport _declspec(dllimport)

typedef struct http_connection      HTTP_CONNECTION;
typedef struct http_auth_parameter  HTTP_AUTH_PARAMETER;
typedef struct http_auth_info       HTTP_AUTH_INFO;

struct http_connection {
SOCKET socketd;
int status;
char *host;
struct sockaddr_in address;
int persistent;
HTTP_AUTH_INFO *auth_info;
};

struct http_auth_parameter {
char *name;
char *value;
HTTP_AUTH_PARAMETER *next_parameter;
HTTP_AUTH_PARAMETER *prev_parameter;
};

struct http_auth_info {
char *method;
int count;
HTTP_AUTH_PARAMETER *first_parameter;
HTTP_AUTH_PARAMETER *last_parameter;
};

extern "C" int _stdcall dav_init(void);

extern "C" int _stdcall dav_connect(HTTP_CONNECTION **connection, const char *host, short port, const char *username, const char *password);
调用:
HTTP_CONNECTION *connection = NULL;
connection = (HTTP_CONNECTION *) malloc(sizeof(HTTP_CONNECTION));
typedef int(proc1)(HTTP_CONNECTION **connection, const char *host, short port, const char *username, const char *password);

proc1* pFunc1;
HINSTANCE hInstance;
hInstance=::LoadLibrary("C:\\ploting\\webdav.dll");
if(hInstance==NULL)
{
        acutPrintf("\n can not fine dll file.");
}
        pFunc1=(proc1*)::GetProcAddress(hInstance,"dav_connect");
int test=(*pFunc1)(&connection,(char *)"192.168.0.22",8080,(char *)"maf",(char *)"maf");
acutPrintf("\n test is %d",test);
编译错误:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

是为什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-9-24 18:31:35 | 显示全部楼层
我的一个学习调用DLL的例子,不过是以ARX作为DLL的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-9-25 08:55:21 | 显示全部楼层
好的,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-6 10:50:33 | 显示全部楼层
1。把dll文件copy入AutoCAD 搜索路径或系统目录
2. 在ARX中包含.h
3.直接调用dll函数即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 00:56 , Processed in 0.197828 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表