如何解决从 dll 访问 .csv 文件
我试图访问我的 DLL 中的文件,但 fopen 总是返回 NULL。我对 DLL 不是很熟悉,也不知道如何调试这个问题。我试图用可执行文件运行我的程序,它运行没有错误。我在下面发布了我的 .c 和 .h 文件,任何帮助表示赞赏。 ReadFile1.c:
#include "ReadFile1.h"
#define MAX_STR_LEN 257
#define MAX_Color_Maps 17
int __declspec(dllexport) __stdcall ReadF(char* ColorMap)
{
FILE* bookFile;
/* allocation of the buffer for every line in the File */
char* buf = malloc(MAX_STR_LEN);
char* tmp;
/* if the space Could not be allocated,return an error */
if (buf == NULL)
{
printf("No memory\n");
return 1;
}
if ((bookFile = fopen("Colormaps2.csv","r")) == NULL) //Reading a file
{
printf("File Could not be opened.\n");
printf("%s",strerror(errno));
return 1;
}
struct Color_decider Colors[MAX_Color_Maps];
int i = 1;
fgets(buf,256,bookFile);
tmp = strtok(buf,";");
char* temp1;
temp1= strdup(tmp);
strncpy(Colors[0].Color_maps,temp1,strlen(temp1));
while (i<17)
{
tmp = strtok(NULL,";");
temp1 = strdup(tmp);
strncpy(Colors[i].Color_maps,strlen(temp1));
i++;
}
for (int k = 1; k < 17; k++)
{
if (!strcmp(Colors[k].Color_maps,ColorMap)) // Find the input column.
{
for (int j = 0; j < 256; j++)
{
fgets(buf,bookFile);
tmp = strtok(buf,";");
for (int l = 1; l < k * 3; L++)
tmp = strtok(NULL,";");
tmp = strtok(NULL,";");
temp1 = strdup(tmp);
Colors->C[j][0] = atoi(temp1);
tmp = strtok(NULL,";");
temp1 = strdup(tmp);
Colors->C[j][1] = atoi(temp1);
tmp = strtok(NULL,";");
temp1 = strdup(tmp);
Colors->C[j][2] = atoi(temp1);
printf("%d\t",Colors->C[j][0]);
printf("%d\t",Colors->C[j][1]);
printf("%d\n",Colors->C[j][2]);
}
break;
}
}
free(buf);
fclose(bookFile);
return 0;
}
ReadFile1.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
struct Color_decider {
char Color_maps[10];
int C[256][3];
};
char *strdup(char *org)
{
int org_size;
static char *dup;
char *dup_offset;
/* Allocate memory for duplicate */
org_size = strlen(org);
dup = (char *)malloc(sizeof(char)*org_size+1);
if( dup == NULL)
return( (char *)NULL);
/* copy string */
dup_offset = dup;
while(*org)
{
*dup_offset = *org;
dup_offset++;
org++;
}
*dup_offset = '\0';
return(dup);
}
int __declspec(dllexport) __stdcall ReadF(char* ColorMap);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。