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

发布于 2024-11-02 03:15:24 字数 946 浏览 4 评论 0原文

我正在尝试构建一个 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 函数;我只是想先让这个工作一次。有什么想法吗?

I am trying to build a dll that reads a text file to populate a 2d array, then change that array as needed. I'm using a VB GUI to access it. The overall program is a micromouse simulator in which the user is able to customize the wall placement in a 5x5 maze, as well as mouse start position and goal placement, and allow the search algorithm (dll) to solve it. Here's the code inside my 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';
    }
}

I want to be able to put in two input variables as the index of the matrix and add or subtract a wall from that location. Whenever I try to call the function from VB, it sends me a message: PInvoke restriction cannot return variants. The function returns nothing, so I don't understand...

Here's the declaration statement inside my VB program:

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

I'm aware I'm not going to be able to call the fread function everytime the user wants to change a wall; I'm just trying to get this working once first. Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔嚣张 2024-11-09 03:15:24

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

Change Function to Sub in your Declare statement in VB. This is because your C++ function returns void.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文