【问题标题】:dereferencing c-pointer in LabVIEW在LabVIEW中取消引用c指针
【发布时间】:2013-12-15 17:29:38
【问题描述】:

我的 .DLL 函数输出一个指向我需要取消引用的字符串的 C 指针。我意识到我需要取消引用指针两次,而且我知道 LabVIEW 中应该有一个内置函数可以做到这一点。但我似乎找不到它。

【问题讨论】:

  • 是不是可以用字符串调用DLL,在调用配置中插入**字符串?
  • 如果您从 LabVIEW 调用您的 DLL 函数,您可以指示 LabVIEW 为您分配必要的内存。然后您的函数只需将数据复制进去。但是,如果您不知道字符串的最大长度,这会变得有点复杂。

标签: pointers dereference labview


【解决方案1】:

根据我的经验,LabVIEW 中存在的任何内存都需要在 LabVIEW 中分配。所以在LabVIEW中分配一个char缓冲区,并在调用库函数中作为StringCStr Pointer传入。

在 C 语言中尽你所能,并将结果以 CStr 的形式返回 Labview。

警告:如果您memcpy() 超出分配内存的范围,Labview 很可能会崩溃,您将无法捕捉到错误。因此,要么使用 try / catch 和安全版本的memcpy,在 Labview 中过度分配,要么测试大小。

C++:
void TestDLL(char Name[], int SizeOfLabviewMemory){
    char *StringInC = "Hello World!"; 
    int SmallerStringSize = 0;
    if(strlen(StringInC) < SizeOfLabviewMemory){
         SmallerStringSize = strlen(StringInC); 
    }else{
         SmallerStringSize = SizeOfLabviewMemory;
    }

    memcpy(Name, StringInC, SizeOfLabviewMemory);  
}

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多