正在从非托管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)这样的东西

如果有人能帮我就太好了。

感谢您的期待

正在从非托管dll中读取变量(结构数组)

假设您的结构如上所述定义,并且变量:

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;   

以及之间的一切