2 feixianglld feixianglld 于 2014.10.30 10:26 提问

vba 中调用win 32 的api接口

※ 下面问题本人也在网上找了很久的答案,可是均不行,希望各位看官能帮帮忙。谢谢。
其中
i 找了win32的返回值为字符串的win32 api的VBA接口调用 =》 测试成功,方法这里就不说了
i 找了win32通过参数返回字符串的win32 api的VBA接口调用 =》测试成功,方法这里就不说了
i 找了通过参数返回字符串数组的自定义C的api的VBA接口调用 =》没测试
例如: C的test.dll接口: void test(char *szArray);
对应的VBA:Private Declare Sub Import_test Lib "test.dll" Alias "test" (ByRef szArray() As String)

※win32 API声明
LPCWSTR PathFindSuffixArrayW(LPCWSTR pszPath, const LPCWSTR *apszSuffix, int iArraySize);
文件位于: C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\Shlwapi.h
库名:shlwapi.dll =》 windows系统自带库
函数功能:查找文件pszPath的扩展名是否属于指定的扩展名数组中,如果是,返回文件的扩展名
说明:参数apszSuffix指向字符串的数组,参数iArraySize为apszSuffix字符串数组的元素个数。

※vba 导入声明
Private Declare Function Import_PathFindSuffixArray Lib "shlwapi.dll" Alias "PathFindSuffixArrayA" (ByVal pszPath As String, ByVal apszSuffix As String, ByVal iArraySize As Long) As Long
=》这个声明正确吗?这是通过ApiView工具自动生成的对应vb接口

我测试了下面的各种声明,均得不到正确结果
Private Declare Function Import_PathFindSuffixArray Lib "shlwapi.dll" Alias "PathFindSuffixArrayA" (ByVal pszPath As String, ByRef apszSuffix() As String, ByVal iArraySize As Long) As Long
Private Declare Function Import_PathFindSuffixArray Lib "shlwapi.dll" Alias "PathFindSuffixArrayA" (ByVal pszPath As String, ByRef apszSuffix As String, ByVal iArraySize As Long) As Long

※接口使用
Dim strTest(2) As String
strTest(0) = ".txt"
strTest(1) = ".ini"
strTest(2) = ".h"

Dim strFile As String
strFile = "abc.ini"

//在C++/C中调用PathFindSuffixArrayW(strFile , strTest, 3)返回 “.ini"

我试了如下的调用,均得不到正确结果
Import_PathFindSuffixArray (strFile , strTest, 3)
Import_PathFindSuffixArray (strFile , strTest(0), 3)
Import_PathFindSuffixArray (strFile , StrPtr(strTest), 3)

//那么请问 : 在VBA中怎么调用这个接口

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!