帮我看看c写的这个函数如何在vb中声明,急!!!!!

funangel 2003-05-13 04:58:15
用c编写连接库,有函数如下
UINT32 FetchNextPageFoodNames( UINT16 FoodNameArray[][16],
UINT16 NameFilter[],
UINT16 MatchRules,
UINT16 Flags,
UINT32 FoodIndexArray[],
UINT32 NumItemsToFetch );
其中FoodNameArray其实想用Unicode类型保存字符串
但VB中byte又是单字节,该如何办?
我用foodnamearray() as string也报错,不允许public类型函数。why?
...全文
27 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
funangel 2003-05-21
已经搞定
抽空来揭帖
回复
funangel 2003-05-16
不行,有错
wrong number of dimensions
:(

明天完不成任务要被老板批了:(
帮帮兄弟呀
回复
funangel 2003-05-16
我用自定义类型,参数设置可以正确
但一运行就报“内存不能读”错误
我看有人说数组容易出问题,但参数里没有数组了
哦,但自定义类型里是有数组
请教!!!!!!!!!!!!!
回复
funangel 2003-05-16
我那应该是对了,但UINT16 NameFilter[]可能错了
我定义为 byval namefilter as string
正确吗
那位大哥回答一下
谢谢
:)
回复
taolei 2003-05-16
用COM吧
回复
funangel 2003-05-16
up
help me!
:(
回复
taolei 2003-05-15
C函数是你写的吗?你可以用COM接口实现同样的功能,VB的类型COM接口都可以定义。

你是一下这个定义可不可以:
declare function FetchNextPageFoodNames(byref FoodNameArray as integer,
byref NameFilter as integer,byval MatchRules as integer,byval Flags as integer,byref FoodIndexArray as long,byval NumItemsToFetch as long) as long

关于数组参数的定义:
dim FoodNameArray(100)(0 to 15) as long
dim NameFilter(0 to 100) as long
调用
FetchNextPageFoodNames(FoodNameArray(0)(0),NameFilter(0)...)
回复
funangel 2003-05-15
我试了几种方法,还是有错
大哥们,救救兄弟吧
看在党国得分上
:)
:(
回复
rainstormmaster 2003-05-15
怎样把VC++代码转换成VB代码 

  对于大多数VB的爱好者来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC++的代码.
  本文就如何把VC++代码转换成VB代码给出了一些策略和方法.
  1.定义常量
  我们首先看第一个例子:
#define STD_COPY 1//COMMCTRL.H
  在VC++代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是:
Public Const STD_COPY=1
  第二个例子:
#define LB_SELECTSTRING0x018C //WINUSER.h
  这有一个问题,VC++中所有以"0x"开头的值是十六进制,而在VB中表示十六进制要用"&H"开头.因此转换成VB的代码为:
Const LB_SELECTSTRING = 0x018C
  第三个例子:
#define TCN_FIRST(0U-550U)
  这里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在VB中不支持 该数据类型).但是unsigned long和signed long(在VB中是Long)两种数据类型的值在存储方式上是一样 的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了.
Const TCN_FIRST=(0-550) 这同样适合以"L"结尾的值
  另外,对于 #define CDDS_ITEMPOSTERASE(CDDS_ITEM | CDDS_POSTERASE),我们需要用"Or"来取代"|"
  2.结构的定义
  我们先看VC++定义的一个比较简单的结构:
typedef struct tagTBSAVEPARAMSA{
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;
  首先我们需要把第一行的"typedef struct"转换成"Public Type"
Public Type tagTBSAVEPARAMSA
  然后处理结构成员,
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
  对于第一个成员类型HKEY.我们要知道VC++中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:
hkr As Long
  同样的,VC++数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:
pszSubKey As String
pszValueName As String
  对于最后一行"}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;"我们只需要用"End Type"取代 就可以了.转换成VB代码后完整的结构为:
Public Type tagTBSAVEPARAMSA
hkr As Long
pszSubKey As String
pszValueName As String
End Type
  以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型
------------------------------------
short Integer
intLong
long Long
UNIT Long
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSGLong
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPSTR,LPCSTRString
LPWSTR,OLECHAR,BSTR String
LPTSTRString
VARIANT_BOOLBoolean
unsigned char Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型)Long
  3.函数的转换
  我们知道VB提供了API Viewer add-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC++函数转换成VB的函数格式是非常重要的.先看第一个例子:
WINCOMMCTRLAPI HWND WINAPI
CreateStatusWindowsA(LONG style,
LPCSTR lpszTest,HWND hwndParent,UINT wID);
  这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态 链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL) 然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到 类型对应表,很容易的转换相应的函数参数.
Public Declare Function CreateStatusWindowA Lib
"ComCtl32.dll" _
(Byval style As Long, _
Byval lpszText As String, _
Byval hwndParent As Long,Byval wID As Long) As Long

转载自计算机世界日报 (文/刘锋)
回复
lwzlemon 2003-05-15
up
回复
SnowOct 2003-05-15
up 来了
回复
funangel 2003-05-15
up
散分
请帮忙up,也有分
回复
funangel 2003-05-13
请说详细好吗
多谢了

两年多不用就差不多忘光了:(
回复
脆皮大雪糕 2003-05-13
FoodNameArray 用指针变量,声明的时候用byref
回复
rainstormmaster 2003-05-13
用byte数组,或用Variant
回复
funangel 2003-05-13
我用byval foodnamearray(),报措说应用"byref"
用byval foodnamearray(4),报错需要“)”
运行编译错误,说不能是public类型,why??
很急,那位大哥救救兄弟吧!
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2003-05-13 04:58
社区公告
暂无公告