我需要你的帮助。
我将以下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)
的内容。如果有人可以帮助我,那就太棒了。
期待你的感谢
答案 0 :(得分:0)
鉴于您的结构定义如上,以及变量:
Dtest *dh_test_types[1000];
从该typedef定义,然后可以通过这种方式访问指向struct(包含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;
介于两者之间