VBA调用相同的C++ dll返回不同的结果

2023-12-19

我有一个测试 dll 函数,可以读取字符串并显示它:

int _stdcall test(LPSTR myString) {
MessageBoxA(NULL, (LPCSTR)myString, "test", MB_OK);
return 0;}

Excel VBA 声明是

Declare Function test Lib "test.dll" (ByVal text As String) As Long

有一个调用该函数的子程序。它读取值为“abcde”的 Excel 单元格,并能够显示正确的结果。子代码是:

sub testCode()
    test (cells(1,1).value)
end sub

但是当使用excel公式调用dll函数时=test(A1),消息框仅显示字符串的第一个字符“a”。

我花了整个周末阅读 BSTR 等,仍然无法解决这个问题。这里发生了什么?


将导入的函数声明为私有:

Private Declare Function test_internal Lib "test.dll" Alias "test" (ByVal text As String) As Long

并创建一个包装函数供 Excel 使用:

Public Function Test (ByVal text As String) As Long
  Test = test_internal(text)
End Functin

因为显然,虽然 VB(A) 在调用时使用当前系统代码页将字符串参数转换为 ASCIIDeclared API,Excel 引擎没有。

顺便说一句,您可能还想删除括号 https://stackoverflow.com/a/8070104/11683.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA调用相同的C++ dll返回不同的结果 的相关文章

随机推荐

  • C++如何右对齐多条数据

    所以我必须发送到std cout一列数据 我还必须在数据周围显示一些字符 例如 Plot Points 0 0 2 3 1 10 12 14 我必须右对齐字母下的最后一个右括号 s in Points 在列标题中 我将数据输出为 cout
  • 使用空字符串而不是 null - 一个好习惯吗?

    例如在数据库中考虑 CREATE TABLE users id INTEGER IDENTITY PRIMARY KEY last name VARCHAR 50 DEFAULT NOT NULL first name VARCHAR 50
  • phpmyadmin 将 csv 从 unicode 导入到 utf8

    我想将一些汉字导入MySQL数据库 但有些内容被省略了 有些内容显得毫无意义 如下图所示 数据库中有什么 Excel文件中的内容 谢谢你 您好 这是附加信息 文本文档 巴掌 b zhang a slap of the palm 打 beat
  • 如何并行运行 NUnit 测试?

    我有一个使用 NUnit 编写的大型验收测试 每个测试约 10 秒 测试套件 我想利用我的机器都是多核心盒的事实 理想情况下 我能够为每个核心运行一个测试 独立于其他测试 有 PNUnit 但它是为测试线程同步问题和类似问题而设计的 我没有
  • Android中如何发送指针事件

    我正在尝试检测 Android 中的虚拟键盘高度 我发现了一个类似的话题 获取Android中虚拟键盘的高度 https stackoverflow com questions 6009487 get height of virtualke
  • 使用 DBD::mysql 时需要有关 perl 错误的帮助

    当我运行使用 DBD mysql 的 perl 脚本时 我收到错误消息 install driver mysql failed Can t load home y lib perl5 site perl 5 8 i686 linux 64i
  • 关于绘图过程 - 关于“Mathematica 8 中函数声明的问题”的进一步问题

    Related Mathematica 8 中函数声明的问题 https stackoverflow com questions 6046626 a problem in mathematica 8 with function declar
  • 绘制 JPanel 的一部分,而不重新绘制其余部分

    我正在尝试用 Java 打造 Mastermind 代码并不难 但我想要一个非常好的界面 我有一个 JPanel 它占用了我所有的 JFrame 并且我用 surchargind 绘制了这个 JPanelrepaint 方法 method
  • SyntaxError:JSON 中位置 1 处出现意外标记 {

    我正在尝试获取包含没有密钥的内部对象的 JSON 请求 但我在位置 1 处得到了 Unexpected token 下面给出了示例 JSON empid 001 academictype 学士 学术学位 BE 学术专业 计算机科学 empi
  • 如何在 IE javascript 中取消/停止上传文件

    我有一个包含两种表单的页面 其中之一不可见并且包含输入类型 文件 我正在使用隐藏表单上传文件 表单的目标是 iframe 元素 我的问题是如何在 IE 下使用 javascript 停止 取消文件上传 我尝试使用 JQuery 删除隐藏表单
  • 这段 C 代码有什么作用 [Duff 的设备]? [复制]

    这个问题在这里已经有答案了 void Send int to const int from const int count int n count 7 8 switch count 8 case 0 do to from case 7 to
  • 清除 C++ unix 中终端屏幕的一部分?

    我想将内容输出到终端窗口上 然后只清除其中的一部分 例如前半部分或四分之一等 而不是其余部分 我有办法做到这一点吗 我正在使用系统 清除 但这会清除所有内容 我不想使用 ncurses 任何帮助表示赞赏 如果您需要一个通用的解决方案 那么它
  • SIGPIPE,管道破裂

    我正在 Linux 机器上使用 epoll 开发一个网络程序 我从 gdb 收到错误消息 Program received signal SIGPIPE Broken pipe Switching to Thread 0x7ffff609a
  • `context.document.body.insertOoxml` 破坏文档,使 Word 崩溃

    我知道这不是一个问题 但我是由 Rick Kirkham 从here https github com OfficeDev office js docs issues 874 显然询问 SO 是为 Microsoft 产品提交错误的方式 p
  • 如何将枚举传递给 Html.RadioButtonFor 以获取 MVC 2 RC 2、C# 中的单选按钮列表

    我尝试使用以下行在 MVC 2 RC 2 C 中呈现单选按钮列表 但它只是在运行时给我以下异常 模板只能与字段访问 属性访问 一维数组索引或单参数自定义索引器表达式一起使用 请问这可能吗 如果可以 怎么做 您可以在 Views Shared
  • 我应该使用 Double 作为 TreeMap 中的键吗?

    正如答案中所描述的HashMap 中的 Double https stackoverflow com questions 1074781 double in hashmap 双精度数不应该在 HashMap 中使用 因为它们很难比较相等性
  • UIView 动画布局Ifneeded 不起作用

    我正在使用此消息将客户视图动画显示到设备屏幕的下边缘 我已连接布局约束并将初始常量设置为 60 当该值设置为 0 时 我希望视图能够以动画方式显示到顶部 但不幸的是 预期的功能无法正常工作 即使调用该方法 当界面方向发生变化时 视图也会被弹
  • 检测输入框何时由键盘填充以及何时由条形码扫描仪填充。

    如何以编程方式检测何时通过键盘输入填充文本输入以及何时通过条形码扫描仪自动填充 我写了这个答案 因为我的条码扫描仪 Motorola LS1203 生成了按键事件 所以我无法使用 Utkanos 的解决方案 我的解决方案是 var Barc
  • 使用 OCaml GADT 编写解释器

    我正在用 OCaml 编写一个小型解释器 并使用 GADT 来输入我的表达式 type value Bool bool gt bool value Int int gt int value Symbol string gt string v
  • VBA调用相同的C++ dll返回不同的结果

    我有一个测试 dll 函数 可以读取字符串并显示它 int stdcall test LPSTR myString MessageBoxA NULL LPCSTR myString test MB OK return 0 Excel VBA