String 如何使用调用库函数节点将字符串传递回labview
我想使用LabVIEW的调用库函数节点来访问DLL函数,并让该函数返回一个字符串以显示在我的VI上。我将如何执行此操作?我很高兴从我的DLL返回数字,但我真的很难找到任何如何返回字符串的示例。从您的问题中,我假设您已经有了一个可以将数字返回到Labview的DLL。为了从DLL返回字符串,我创建了一个具有以下C++函数< /p>的DLLString 如何使用调用库函数节点将字符串传递回labview,string,dll,labview,String,Dll,Labview,我想使用LabVIEW的调用库函数节点来访问DLL函数,并让该函数返回一个字符串以显示在我的VI上。我将如何执行此操作?我很高兴从我的DLL返回数字,但我真的很难找到任何如何返回字符串的示例。从您的问题中,我假设您已经有了一个可以将数字返回到Labview的DLL。为了从DLL返回字符串,我创建了一个具有以下C++函数< /p>的DLL void returnString(char myString[]) { const char *aString = "test string"; me
void returnString(char myString[])
{
const char *aString = "test string";
memcpy(myString, aString, 12);
}
然后在Labview中,我使用调用库函数节点,并按如下方式对其进行配置
Library Name or Path: c:\path\to\my\custom.dll
Function Name: returnString
Calling Convention: C
Parameters:
Parameter: return type
type: void
Parameter: arg1
type: String
string format: C String Pointer
Function prototype:
void returnString(CStr arg1);
但是我在编译DLL项目时遇到了构建错误
更新
感谢@bk1e comment,别忘了在Labview中为字符串预先分配空间。至少有几种方法可以从调用库函数节点返回字符串:
examples/dll/regexpr/Regular Expression Solution/VIs/Get Error String.vi
采用这种方法
examples/dll/hostname/hostname.vi
使用“C字符串指针”字符串格式时,LabVIEW代码负责预分配足够大的字符串以传递给调用库函数节点,否则DLL可能会损坏LabVIEW堆。分配字符串的一种方法是将Initialize Array和Byte Array组合为字符串。使用第二种方法与许多Windows API函数的工作方式类似-第一次调用缓冲区大小为0以查询字符串长度,第二次调用缓冲区大小为适当。这样DLL就不会绑定到LabVIEW,但也可以从其他编程环境中使用。
CStr returnString()
{ ...
}