首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在DLL中调用从MS-Access VBA返回char *的C函数

在DLL中调用从MS-Access VBA返回char *的C函数
EN

Stack Overflow用户
提问于 2015-01-14 10:40:13
回答 1查看 534关注 0票数 2

我有一个DLL,它的函数声明如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char * __declspec(dllexport) WINAPI test(int x);

我想在Access VBA中这样调用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Private Declare Function "test" Lib "MyDLL.dll"(ByVal x As Long) As String

Sub MySub
    Dim s As String
    s = test(1)
End Sub

根据在Google中找到的文章,我在DLL中编写了一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BSTR CStrToVBStr(char *str)
{
    int wslen = MultiByteToWideChar(CP_ACP, 0, str, lstrlen(str), 0, 0);
    BSTR bstr = SysAllocStringLen(0, wslen);
    MultiByteToWideChar(CP_ACP, 0, str, strlen(str), bstr, wslen);
    return bstr;
}

在调用test()之后,s显然包含Unicode字符。也就是说,将char * "test“返回给VBA,使Mid(s,1,1) = "t",Mid(s,2,1) = Chr(0),Mid(s,3,1) = "e",等等。我决定跳过到Unicode的转换,并将CstrToVBStr写为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BSTR CStrToVBStr(char *str)
{
    return SysAllocString(str);
}

并忽略了SysAllocString接受OLECHAR *而不是char *参数的警告。返回的字符串现在看起来不错,但是包含了空字符终止符,所以如果char *是"test",那么在VBA中len(s) =5,Right(s,1) = Chr(0)。

做我正在做的事情,正确的方法是什么?我看到的所有示例都是将char *作为参数,而不是返回值。我可以将test()更改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void __declspec(dllexport) WINAPI test(int x, char *result);

但我想知道我正在尝试做的事情是否可能。

我在Windows 7(64位)上使用Access 2007。

EN

回答 1

Stack Overflow用户

发布于 2015-01-14 11:18:46

charinteger相同。在VBA中,这意味着long (因为VBA使用16位术语)。不涉及任何字符串。要将整数或字符转换为字符串,请使用chr(x)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27940971

复制
相关文章
win7下锐捷无法找到网卡的解决方法
        身边很多同学和我一样,在windows7还没上市就已经安装了它。虽然win7给我们带来了全新的体验和感受,但是也存在一些小问题需要我们去解决。
reizhi
2022/09/26
1.5K0
win7下锐捷无法找到网卡的解决方法
解决VMware 7在Windows 7上无法上网的问题
Windows 7上的VPC不能安装64位的操作系统和Linux等,就安装了个VMware 7来解决我的这个问题,另一个问题出来了虚拟机里头的系统无法上网,通过Google找到一些方法,写的都不详细,这里记录下最完整的配置过程: 首先打开Windows 7的网络和共享中心,然后点左边的更改适配器设置,你会看到两个由VMware创建的虚拟连接,找到VMware Network Adapter VMnet1,记住它的连接名称。 然后右击你当前使用中的连接(比如我使用的是ADSL连接)选择属性,把全部的钩都打上,
张善友
2018/01/19
2.7K0
解决VMware 7在Windows 7上无法上网的问题
laravel访问路由在nginx服务器上无法处理
用过laravel的童鞋们都知道,访问路径一般都是/admin/index这样的形式,可是在nginx服务器上运行代码时却会出现无法找到页面的情况,这是因为nginx没有配置好。 在nginx的配置文件中找到以下代码: location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404.
NateHuang
2018/03/14
5.2K1
关于C ++:Cmake无法找到Boost库
boostc++cmake Cmake cannot find Boost libraries 我是Cmake的新手,并增强了C ++中的库。 我正在做一个需要boost和Cmake的项目。 我正在使用Cmake版本2.8.11,MS Visual Studio 2013和Boost 1.54.0。 当我尝试从Cmake配置时,出现以下错误:
用户3519280
2023/07/08
1.2K0
ALM在win7/IE8下无法浏览
被这个问题困扰过的同学有多少? ---- 操作系统WIN7 64位。 安装完ALM后,用IE8打开查看,没有登录界面,提示需要安装东西。 按照提示安装,没有响应,然后到网上查了一下资料: ALM/QC11.0在win8/IE11下无法浏览 页面显示要求安装插件,安装ALM-Platform Loader 11.msi 失败,提示 cannot be installed on windows xp/vista/windows7 x64。 UAC已关闭,bcd已关闭,浏览器安全级别最低,保护模式已取消勾选,证
张树臣
2018/05/15
1.1K0
VirtualBox克隆后无法找到网卡的问题
Virtualbox现在更新到了4.1.6版本,我记得在之前的版本中,镜像的克隆只能通过命令行的方式来进行,现在已经可以通过界面来进行克隆了,可以说非常的方便。
大江小浪
2018/07/25
1.3K0
VirtualBox克隆后无法找到网卡的问题
glui.h无法找到描述+解决+测试
GLUI 是一个基于 GLUT 的 C++ 用户界面库,它为 OpenGL 应用程序提供按钮、复选框、单选按钮和微调器等控件。它独立于窗口系统,使用 GLUT 或 FreeGLUT。
zhangrelay
2022/08/10
6230
glui.h无法找到描述+解决+测试
php – Laravel 7 Session Lifetime
如果它的时间少于Laravel配置,则cookie将被删除,因为本地php.ini优先于Laravel配置.
Lansonli
2021/10/09
1.1K0
无法为 WSDD 操作找到匹配的 Java 操作
我发现了错误。 只需要把“AndrQues”改成“andrQues”,程序就可以正常运行了。
matinal
2023/10/13
1690
PE盘装系统时无法找到ISO文件
用PE盘装系统时,在选择包含Windows安装文件的文件夹时,找不到ISO系统镜像映像,如图所示
全栈程序员站长
2022/09/12
6.2K0
PE盘装系统时无法找到ISO文件
Laravel 7发行说明
Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。
Lansonli
2021/10/09
9K0
成功解决python.exe 无法找到入口 无法定位程序输入点
问题描述:在新建的环境装了 FLAML 跑自动化机器学习,配置了 jupyter 有关依赖库和扩展,进入 jupyter notebook 就会弹出这个错误,但将其叉掉却又可以正常进入 jupyter notebook 调试代码。初步分析觉得应该是 dll 文件出了问题。看了一些网上的解决方案,如下所示:
叶庭云
2022/06/25
4.4K0
成功解决python.exe 无法找到入口 无法定位程序输入点
数据工厂平台-7:菜单和首页
上回我们成功的导入了第三方的菜单。虽然漂亮,功能多。但是也难免出现各种各样的问题:
我去热饭
2022/05/19
4680
数据工厂平台-7:菜单和首页
解决 IDEA 无法找到 java.util.Date 的问题
最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date。
andyxh
2019/09/10
1.8K0
解决 IDEA 无法找到 java.util.Date 的问题
clover 引导无法扫描 找到windows系统解决办法[通俗易懂]
cmd下cd切换到系统盘盘符 如C: 挂载efi分区为S盘 执行bcdboot C:\Windows /s S: /f uefi /l zh-cn
全栈程序员站长
2022/07/23
1.6K0
Laravel 6.12.0 版本发布,支持从扩展包加载模型工厂
Laravel 开发团队本周发布了 6.12.0 版本,此次更新支持从扩展包加载模型工厂,通过 dump 函数测试 Session 数据,以及很多其他新特性。另外,这次更新还包含了很多第三方开发者贡献的、用于优化重复操作的语法糖,例如过滤请求输入字段中的非布尔值。
学院君
2020/02/19
7750
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
除了页面中已经定义的默认方法之外,还可以定义将在整个测试过程中使用的其他方法。 例如,如果我们正在开发音乐管理应用程序,我们可能需要一个公共方法来在应用程序中创建列表,而不是重写在每个页面和测试类中创建播放列表的逻辑。 此时,可以在页面类中定义createPlaylist方法:
上进小菜猪
2022/12/18
1.8K0
【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理
点击加载更多

相似问题

Laravel工厂国家-无法找到工厂

20

Laravel工厂无法找到名称为[默认]的工厂

20

Laravel 5.8工厂声明无法找到名称为[default] [CLASS]的工厂

114

Laravel 5.2:无法找到有名称的工厂[默认]

1716

无法在Tinker使用Laravel工厂

45
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文