如何从DLL中检索数组变量? (Visual C ++)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从DLL中检索数组变量? (Visual C ++)相关的知识,希望对你有一定的参考价值。
第三方C库包含以下全局变量和函数:
typedef RtBasis float[4][4];
RI_EXPORT RtBasis RiCatmullRomBasis;
RI_EXPORT void RiBasis(RtBasis u);
我想从DLL中检索变量和函数,并在我的C ++代码中使用它们。当我执行以下操作时:
// Get the function.
void (*RiBasis)(RtBasis);
RiBasis = (void (*)(RtBasis))GetProcAddress(h, "RiBasis");
// Get the variable.
RtBasis *RiCatmullRomBasis;
RiCatmullRomBasis = (RtBasis*)GetProcAddress(h, "RiCatmullRomBasis");
// Call the function, passing it the variable.
RiBasis(RiCatmullRomBasis);
Visual C ++在调用RiBasis时给出了这个编译错误:
error C2664: 'void (float [][4])': cannot convert argument 1
from 'RtBasis (*)' to 'float [][4]'
我尝试从RiCatmullRomBasis变量中删除一个间接级别:
// Get the variable.
RtBasis RiCatmullRomBasis;
RiCatmullRomBasis = (RtBasis)GetProcAddress(h, "RiCatmullRomBasis");
// Call the function, passing it the variable.
RiBasis(RiCatmullRomBasis);
但是这给了我关于GetProcAddress调用的以下内容:
error C2440: 'type cast': cannot convert from 'FARPROC' to 'RtBasis'
note: There are no conversions to array types, although there are
conversions to references or pointers to arrays
在C ++代码中声明类型的正确方法是什么?
答案
在第一个版本中,将呼叫设为:
RiBasis(*RiCatmullRomBasis);
您需要获取变量的地址(这是GetProcAddress可以返回的),但该函数采用实例而不是指针,因此您必须取消引用返回的指针。
以上是关于如何从DLL中检索数组变量? (Visual C ++)的主要内容,如果未能解决你的问题,请参考以下文章
C++,Visual Studio 2017:从加载的 .dll 中访问 .exe 的全局变量 [重复]
如何从 C# 中的 C++ dll 中的全局变量从函数中获取返回数组?
从 VB6 调用 C dll,其中 dll 是使用 Visual Studio 2013 编写的
如何将 unsigned short* 从 Visual-C++ DLL 传递到 VB.NET