明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: zfbj

[讨论]对VBA编程很有意义的问题

  [复制链接]
 楼主| 发表于 2003-8-14 12:47:00 | 显示全部楼层
今天一个很了解API和DLL的朋友告诉我,如果DLL使用VC创建,并且其中包含了指针参数,VB就无法调用了!
发表于 2003-8-29 16:26:00 | 显示全部楼层
到底怎么办呀
迷糊 ing
发表于 2005-7-1 11:08:00 | 显示全部楼层
mccad发表于2003-8-4 15:37:00终于写出了一部分的带预览的打开文件对话框,只是返回文件名部分还不知道怎么搞:Private Declare Function acedGetFileNavDialog Lib _ \"acad.exe\"...

  c中的数据类型 VB中的声明 结果
  
  ATOM ByVal variable As Integer 结果为Integer 类型的表达式
  
  BOOL ByVal variable As Boolean 结果为 Long 类型的表达式
  
  BYTE ByVal variable As Byte 结果为 Byte 类型的表达式
  
  CHAR ByVal variable As Byte 结果为 Byte 类型的表达式
  
  COLORREF ByVal variable As Long 结果为 Long 类型的表达式
  
  DWORD ByVal variable As Long 结果为 Long 类型的表达式
  
  HWND, HDC, HMENU ByVal variable As Long 结果为 Long 类型的表达式等Windows 句柄
  
  INT, UINT ByVal variable As Long 结果为 Long 类型的表达式
  
  LONG ByVal variable As Long 结果为 Long 类型的表达式
  
  LPARAM ByVal variable As Long 结果为 Long 类型的表达式
  
  LPDWORD variable As Long 结果为 Long 类型的表达式
  
  LPINT, LPUINT variable As Long 结果为 Long 类型的表达式
  
  LPRECT variable As type 自定义类型的任意变量
  
  LPSTR, LPCSTR ByVal variable As String 结果为 String 类型的表达式
  
  LPVOID variable As Any 任何变量(在传递字符串的时候使用ByVal)
  
  LPWORD variable As Integer 结果为Integer 类型的表达式

  LRESULT ByVal variable As Long 结果为 Long 类型的表达式
  
  NULL As Any 或 ByVal Nothing 或 ByVal variable As Long ByVal 0& 或 VBNullString
  
  SHORT ByVal variable As Integer 结果为Integer 类型的表达式
  
  VOID Sub procedure 不可用
  
  WORD ByVal variable As Integer 结果为Integer 类型的表达式
  
  WPARAM ByVal variable As Long 结果为 Long 类型的表达式
发表于 2005-7-1 11:24:00 | 显示全部楼层
< class=signature>调整参数传递方式后依然出错,因此我查了objectARX的文档:


< class=signature>以下是acedGetFileNavDialog的声明,看来问题并不出在字符串上,因为result根本就不是字符串类型,而是一个结构。


< class=signature>extern "C" int


< class=signature>acedGetFileNavDialog(


< class=signatureIn>const char* title,


< class=signatureIn>const char* default,


< class=signatureIn>const char* ext,


< class=signatureIn>const char* dlgname,


< class=signatureIn>int flags,


< class=signatureInEnd>struct resbuf** result);
发表于 2005-7-1 11:25:00 | 显示全部楼层
再看resbuf的结构定义:
union ads_u_val { 
    ads_real rreal; 
    ads_real rpoint[3]; 
    short rint; // Must be declared short, not int.  
    char *rstring; 
    long rlname[2]; 
    long rlong; 
    struct ads_binary rbinary; 
}; 
struct resbuf { 
    struct resbuf *rbnext; // Linked list pointer  
    short restype; 
    union ads_u_val resval; 
}; 
	
看来是个链表
发表于 2005-7-1 11:48:00 | 显示全部楼层
查阅了result的相关数据类型定义,发现其中不仅包含结构、联合,还有内存数据块的,看来要用VB来定义是比较困难了。
发表于 2005-7-1 14:13:00 | 显示全部楼层
在R12版本中,VB ADS函数库中有的RESBUFTYPE类型的定义,这个问题应该就能解决了。


但是……


时代变了……现在是2005了……更先进了……更不知道怎么办了……茫然了……
发表于 2006-10-10 08:35:00 | 显示全部楼层
不知到解决没有?
发表于 2006-10-23 22:59:00 | 显示全部楼层

应该是VB定义不了有些VC 的数据类型.

所以有些函数调用不了.

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 23:22 , Processed in 0.171870 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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