在matlab中调用C函数的变量地址

标签 c matlab pointers dll memory-address

我在 C 中创建了一个 .dll,其中有一些函数可以通过调用变量的地址来更改变量。我有一段代码使用了 C 中的一些函数:

char logfile[1000] = "i.log";
bool bRet = OpenDevice(logfile);
//FindHardware
int model;
int *ptr = &model;
char name_buffer[1000], sn_buffer[1000];
FindHardware(ptr, name_buffer, 1000, sn_buffer, 1000);
printf("Hardware found: %s", name_buffer);

模型变量与 name_buffer 和 sn_buffer 一起改变。现在我正在尝试为 matlab 复制这段代码,我认为这应该完全一样:

header = 'header.h'; % url for header
dll = 'dll.dll'; % url for .dll
loadlibrary(dll, header);

logfile = 'i.log';
bRet = calllib('dll', 'OpenDevice', logfile);

model_number = 0;
% FindHardware
name_buffer = blanks(1000);
sn_buffer = blanks(1000);
model_number_pointer = libpointer('int32Ptr', model_number);
calllib('dll', 'FindHardware', model_number_pointer, name_buffer, 1000, sn_buffer, 1000);

但是没有任何变量被改变。我想这与我创建的指针有关,是否有其他方法可以访问 model_number 的地址?

最佳答案

我认为您可能需要使用 MATLAB's pointers , lib.pointer 类,用于所有输出参数。您可能还需要设置每个的数据类型。

model_number = int32(0);
modelPtr = libpointer('int32Ptr',model_number);

name_buffer = blanks(1000);
nameBufPtr = libpointer('stringPtr',name_buffer);

sn_buffer = blanks(1000);
snBufPtr = libpointer('stringPtr',name_buffer);

calllib('dll', 'FindHardware', modelPtr , nameBufPtr , 1000, snBufPtr, 1000);

这有帮助吗?也许 libfunctionsview dll 会阐明正确的语法。您可能还希望获得一个输出参数来帮助调试 (out = calllib(...))。

关于在matlab中调用C函数的变量地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27746501/

相关文章:

c - 共享变量[RTOS]

matlab - 优化嵌套循环以计算矩阵行的xcorr

结构和指针的 C 错误

C++ - 指向函数的全局指针

c - 如何在 C 中使用 libevdev 生成键盘输入

matlab - 为什么 matlab 不给我 16KHz 采样频率的 8KHz 正弦波?

matlab - nifti 文件中的 'originator' 标签是什么?

c++ - 构造函数和成员函数中的指针返回不同的地址

c - 无法以相反顺序打印文字

c - C语言中如何判断一个字符串是否为整数?