递归火山软件开发平台

标题: 请教:VS C++如果调用火山DLL? [打印本页]

作者: 摘星揽月    时间: 2024-1-22 13:14
标题: 请教:VS C++如果调用火山DLL?
比如火山DLL 输出一个方法,该方法的参数为文本型或变整数,那么c++如何传入和获取文本,整数传入传出我搞定了,文本的传入和传出没有,谁会,请帮助写了调用的例子。

作者: Xelloss0618    时间: 2024-1-22 13:50
火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ 那边可以给火山 DLL 传参文本指针,但不能用来获取火山的文本。

如果火山那边要传出文本,应该将参数改成变整数,当作文本指针使用。C++ 给它传 WCHAR * 指针,火山把文本数据复制到这个指针里面(C++ 那边注意分配文本长度,参考 Win32 API 的写法)。
作者: urenai    时间: 2024-1-22 14:01
具体方法只有一种,参考 Win32 API 的写法。

调用DLL api的时候,给一个缓冲区地址(够长),火山函数得到的指针后,往指针里写文本数据。
作者: 摘星揽月    时间: 2024-1-22 15:51
Xelloss0618 发表于 2024-1-22 13:50
火山导出的 DLL 函数,如果参数是文本型,会变为文本指针 const WCHAR *
但只支持传入文本到火山,就是 C++ ...

大佬,可否告知哪个api,我不太熟悉
作者: 呵呵仙8    时间: 2024-1-22 18:01
火山的文本,是一个类.所以,如果100%支持火山的文本型变量的话,你得在任何语言都得构建一个和它一样结构的类.按理c++类和火山的类是不一样的.所以,吴总不会说谎c++能和火山互通了!!
作者: 摘星揽月    时间: 2024-1-22 19:46
urenai 发表于 2024-1-22 14:01
具体方法只有一种,参考 Win32 API 的写法。

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

大佬,可否告知哪个api,我不太熟悉
作者: hcwanz    时间: 2024-1-22 20:17
本帖最后由 hcwanz 于 2024-1-22 20:19 编辑
摘星揽月 发表于 2024-1-22 19:46
大佬,可否告知哪个api,我不太熟悉

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

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

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

能搞个c++调用的demo不
作者: hcwanz    时间: 2024-1-22 20:32
本帖最后由 hcwanz 于 2024-1-22 20:34 编辑

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

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

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

作者: 摘星揽月    时间: 2024-1-22 21:11
hcwanz 发表于 2024-1-22 20:32
//定义u16string所在头文件,应该是这个
#include
//这里是火山传出的文本指针。

感谢感谢,最终实现和你这差不多。搞定了
作者: urenai    时间: 2024-1-23 01:34
摘星揽月 发表于 2024-1-22 19:46
大佬,可否告知哪个api,我不太熟悉

不需要什么API啊

C++ 端  直接给参  缓冲区地址。
火山端  直接往参数 里写数据。

不过,正常来讲,你至少给2个参数,第一个是指针 第二个是长度,
具体的话,可以参考:getwindowtext  
作者: urenai    时间: 2024-1-23 01:37
摘星揽月 发表于 2024-1-22 19:46
大佬,可否告知哪个api,我不太熟悉

如果不好确定 缓冲区长度。
也可以参考win32 API.
执行2此,
当指针=0时,判断len参数 是否为可写指针,
若为指针,在火山 内先算一遍具体长度。
再把这个长度写道len参数里。

也不知道我有没有讲清楚。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4