火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 826|回复: 11
打印 上一主题 下一主题

[视窗] 请教:VS C++如果调用火山DLL?

[复制链接]

82

主题

479

帖子

3007

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3007
跳转到指定楼层
楼主
发表于 2024-1-22 13:14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如火山DLL 输出一个方法,该方法的参数为文本型或变整数,那么c++如何传入和获取文本,整数传入传出我搞定了,文本的传入和传出没有,谁会,请帮助写了调用的例子。
回复

使用道具 举报

26

主题

1502

帖子

5643

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5643
沙发
发表于 2024-1-22 13:50:51 | 只看该作者
火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ 那边可以给火山 DLL 传参文本指针,但不能用来获取火山的文本。

如果火山那边要传出文本,应该将参数改成变整数,当作文本指针使用。C++ 给它传 WCHAR * 指针,火山把文本数据复制到这个指针里面(C++ 那边注意分配文本长度,参考 Win32 API 的写法)。
回复

使用道具 举报

307

主题

1383

帖子

5330

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5330
QQ
板凳
发表于 2024-1-22 14:01:27 | 只看该作者
具体方法只有一种,参考 Win32 API 的写法。

调用DLL api的时候,给一个缓冲区地址(够长),火山函数得到的指针后,往指针里写文本数据。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

82

主题

479

帖子

3007

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3007
地板
 楼主| 发表于 2024-1-22 15:51:44 | 只看该作者
Xelloss0618 发表于 2024-1-22 13:50
火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ ...

大佬,可否告知哪个api,我不太熟悉
回复

使用道具 举报

50

主题

484

帖子

1948

积分

金牌会员

Rank: 6Rank: 6

积分
1948
5#
发表于 2024-1-22 18:01:04 | 只看该作者
火山的文本,是一个类.所以,如果100%支持火山的文本型变量的话,你得在任何语言都得构建一个和它一样结构的类.按理c++类和火山的类是不一样的.所以,吴总不会说谎c++能和火山互通了!!
回复

使用道具 举报

82

主题

479

帖子

3007

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3007
6#
 楼主| 发表于 2024-1-22 19:46:37 | 只看该作者
urenai 发表于 2024-1-22 14:01
具体方法只有一种,参考 Win32 API 的写法。

调用DLL api的时候,给一个缓冲区地址(够长),火山函数得到 ...

大佬,可否告知哪个api,我不太熟悉
回复

使用道具 举报

57

主题

776

帖子

3581

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3581
7#
发表于 2024-1-22 20:17:07 | 只看该作者
本帖最后由 hcwanz 于 2024-1-22 20:19 编辑
摘星揽月 发表于 2024-1-22 19:46
大佬,可否告知哪个api,我不太熟悉

传输的时候传文本指针。如果是用c++的u16string,直接在构造函数(或着用‘=’赋值)里用指针就行。(火山是utf16,string好像是utf8,不能直接用,至少要转换一下,或者用u16string)
火山里就是用指针到文本(或者添加指针文本)

如果是不支持指针赋值的,就把文本长度也一并传上,用的时候用内存复制就行。
回复

使用道具 举报

82

主题

479

帖子

3007

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3007
8#
 楼主| 发表于 2024-1-22 20:21:29 | 只看该作者
hcwanz 发表于 2024-1-22 20:17
传输的时候传文本指针。如果是用c++的u16string,直接在构造函数(或着用‘=’赋值)里用指针就行。(火山 ...

能搞个c++调用的demo不
回复

使用道具 举报

57

主题

776

帖子

3581

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3581
9#
发表于 2024-1-22 20:32:58 | 只看该作者
本帖最后由 hcwanz 于 2024-1-22 20:34 编辑

//定义u16string所在头文件,应该是这个
#include <string>
//这里是火山传出的文本指针。
wchar* 火山文本指针;

//定义一个u16string的变量,然后调用构造方法,传入火山传出的文本指针。
u16string 变量(火山文本指针);

//这样u16string类型的变量里,存储的就是火山传出的文本了。
回复

使用道具 举报

82

主题

479

帖子

3007

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3007
10#
 楼主| 发表于 2024-1-22 21:11:45 | 只看该作者
hcwanz 发表于 2024-1-22 20:32
//定义u16string所在头文件,应该是这个
#include
//这里是火山传出的文本指针。

感谢感谢,最终实现和你这差不多。搞定了
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-5-20 11:46 , Processed in 0.088895 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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