正在从非托管dll中读取变量(结构数组)
本文关键字:变量 读取 结构 数组 dll | 更新日期: 2023-09-27 17:59:23
我需要你的帮助。
我有以下c代码作为dll(无法重新编译或更改它):
typedef struct {
/* The name of the test */
char *name;
/* The SHORT name of the test (its call name) */
char *sname;
/* pointer to a test description */
char *description;
/* Standard test default */
unsigned int psamples_std;
/* Standard test default */
unsigned int tsamples_std;
/* Number of independent statistics generated per run */
unsigned int nkps;
/* A pointer to the test itself (must be filled at initialization) */
int (*test)();
/* void pointer to a vector of additional test arguments */
void *targs;
} Dtest;
这个结构在数组中的dll中使用,如您所见:
Dtest *dh_test_types[1000];
经过大量研究,我找到了一种从DLL中获得"简单类型"变量包的方法:
IntPtr hdl;
hdl = LoadLibrary("cygdieharder-3.dll");
IntPtr addr = GetProcAddress(hdl, "dh_test_types");
对于简单的类型,我使用
int value = Marshal.ReadInt32(addr);
但我无法获得任何关于URL中"Dtest"结构数组的信息,因为没有像Marshal.readDtest(addr)这样的东西
如果有人能帮我就太好了。
感谢您的期待
假设您的结构如上所述定义,并且变量:
Dtest *dh_test_types[1000];
从该typedef定义,则可以通过以下方式访问指向结构的指针数组(包含100个元素):
dh_test_types[0]->name;
dh_test_types[0]->sname;
dh_test_types[0]->description;
dh_test_types[0]->psamples_std;
dh_test_types[0]->sname;
dh_test_types[0]->targs;
dh_test_types[0]->test;
dh_test_types[0]->tsamples_std;
//... all the rest of indices...
dh_test_types[99]->name;
dh_test_types[99]->sname;
dh_test_types[99]->description;
dh_test_types[99]->psamples_std;
dh_test_types[99]->sname;
dh_test_types[99]->targs;
dh_test_types[99]->test;
dh_test_types[99]->tsamples_std;
以及之间的一切