C ++ DLL中的文件I / O?

时间:2011-04-17 23:15:51

标签: vb.net dll file-io fread populate

我正在尝试构建一个读取文本文件以填充二维数组的DLL,然后根据需要更改该数组。我正在使用VB GUI来访问它。整个程序是一个微型模拟器,用户可以在5x5迷宫中自定义墙壁放置,以及鼠标开始位置和目标放置,并允许搜索算法(dll)解决它。这是我的dll中的代码:

/*testDLL.cpp*/

#include "testDLL.h"
#include <stdio.h>

FILE *maze;

char mazearray[12][12];

void _stdcall wallfunction(int x, int y){

    maze = fopen ("C:\Users\Public\Documents\5x5mazedefault.txt", "r");
    fread (mazearray, sizeof(mazearray), 1, maze);
    fclose(maze);
    if (mazearray[x][y] == 'X'){
            mazearray[x][y] = ' ';
    }
    else if (mazearray[x][y] == ' '){
        mazearray[x][y] = 'X';
    }
}

我希望能够输入两个输入变量作为矩阵的索引,并从该位置添加或减去一个墙。每当我尝试从VB调用该函数时,它都会向我发送一条消息:PInvoke限制不能返回变体。该函数什么都不返回,所以我不明白...

这是我的VB程序中的声明语句:

Private Declare Function wallfunction Lib "C:\Path\Path\testDLL.dll" (ByVal x As Integer, ByVal y As Integer)

我知道每次用户想要更换墙壁时我都无法调用fread功能;我只是想先让它工作一次。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在VB中的Declare语句中将Function更改为Sub。这是因为你的C ++函数返回void。