摘星揽月 发表于 2024-1-22 13:14:56

请教:VS C++如果调用火山DLL?

比如火山DLL 输出一个方法,该方法的参数为文本型或变整数,那么c++如何传入和获取文本,整数传入传出我搞定了,文本的传入和传出没有,谁会,请帮助写了调用的例子。

Xelloss0618 发表于 2024-1-22 13:50:51

火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ 那边可以给火山 DLL 传参文本指针,但不能用来获取火山的文本。

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

urenai 发表于 2024-1-22 14:01:27

具体方法只有一种,参考 Win32 API 的写法。

调用DLL api的时候,给一个缓冲区地址(够长),火山函数得到的指针后,往指针里写文本数据。

摘星揽月 发表于 2024-1-22 15:51:44

Xelloss0618 发表于 2024-1-22 13:50
火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ ...

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

呵呵仙8 发表于 2024-1-22 18:01:04

火山的文本,是一个类.所以,如果100%支持火山的文本型变量的话,你得在任何语言都得构建一个和它一样结构的类.按理c++类和火山的类是不一样的.所以,吴总不会说谎c++能和火山互通了!!

摘星揽月 发表于 2024-1-22 19:46:37

urenai 发表于 2024-1-22 14:01
具体方法只有一种,参考 Win32 API 的写法。

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

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

hcwanz 发表于 2024-1-22 20:17:07

本帖最后由 hcwanz 于 2024-1-22 20:19 编辑

摘星揽月 发表于 2024-1-22 19:46
大佬,可否告知哪个api,我不太熟悉
传输的时候传文本指针。如果是用c++的u16string,直接在构造函数(或着用‘=’赋值)里用指针就行。(火山是utf16,string好像是utf8,不能直接用,至少要转换一下,或者用u16string)
火山里就是用指针到文本(或者添加指针文本)

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

摘星揽月 发表于 2024-1-22 20:21:29

hcwanz 发表于 2024-1-22 20:17
传输的时候传文本指针。如果是用c++的u16string,直接在构造函数(或着用‘=’赋值)里用指针就行。(火山 ...

能搞个c++调用的demo不

hcwanz 发表于 2024-1-22 20:32:58

本帖最后由 hcwanz 于 2024-1-22 20:34 编辑

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

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

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

摘星揽月 发表于 2024-1-22 21:11:45

hcwanz 发表于 2024-1-22 20:32
//定义u16string所在头文件,应该是这个
#include
//这里是火山传出的文本指针。


感谢感谢,最终实现和你这差不多。搞定了
页: [1] 2
查看完整版本: 请教:VS C++如果调用火山DLL?