我正在尝试通过本机 fprint() ox 函数写入在外部 c++ dll 中创建的文件。
我的 C++ 代码是(受C. Bos的GnuDraw包的 src 代码启发):
#define OxSetOpenFile(pv,i,d,f) (pv)[i].type = OX_FILE, (pv)[i].t.ioval.fp = d, (pv)[i].t.ioval.fmode = f
extern "C" void OXCALL fopen_C(OxVALUE *rtn, OxVALUE *pv, int cArg)
{
char *sFile;
FILE *fh;
if (cArg != 1)
OxRunError(ER_ARGS, NULL);
OxLibCheckType(OX_STRING, pv, 0, 0);
sFile = OxStr(pv, 0);
fh = fopen(sFile, "w");
if (fh == NULL)
OxRunErrorMessage("Oops, I can't open the file");
OxSetOpenFile(rtn, 0, fh, 162); //162 is found in the gnudraw src code
}
我使用 Visual Studio 2015 构建 dll,但是我无法从 ox 写入此文件,以下 Ox 代码在 fprint() 函数处崩溃:
main()
{
decl fh = fopen_C("test.txt");
if(!isfile(fh))
oxrunerror("not file", 0);
fprint(fh, "test text"); /// crash here
}
我收到以下错误消息:close.cpp Expression (_osfile(fh) & FOPEN) 中的“Debug Assertion Error”。
我找到了一个类似的帖子(here),但答案(使用 /MTd 或 /MDd -即更改运行时)不起作用。我可以通过在 C 中创建一个新的 fprintf 函数并从 Ox 调用它(它可以工作)来克服这个问题,但我更喜欢使用本机 ox fprint 函数。我认为这个问题可以链接到这个问题,最后是以下问题:如何将文件指针从 c 传递给 windows 中的 ox ?