我正在通过 Pro*C 访问 Oracle DB 编写的 DLL 函数遇到奇怪的行为;具体来说,当我从 MQL4 调用它时它工作正常,而当从 C 客户端调用时它会在特定行崩溃。
崩溃原因显示“GAClient.exe 中 0x61428C74 (oranls11.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x00E368EC。”
我在 Windows 8 64 位上使用 Visual Studio 2010,尽管开发环境设置为构建 32 位 DLL。经过几天的调试,我得出以下结论: - 调用EXEC SQL FETCH时发生崩溃。光标打开正常。- 传递给 DLL 函数的所有参数都以完全相同的值到达崩溃点,正如我可以从一系列 fprintf() 命令中收集到的那样。对于用于获取的变量也是如此(尤其是)。- Oracle 会话跟踪文件几乎相同,显然 Fetch 也成功了 - 两个客户端(MT4.exe 和 GAClient.exe)都是从命令提示符执行的,具有相同的环境变量集(PATH、ORACLE_HOME 等)
我什至不确定在这个阶段发布哪些代码片段有用;如果有人知道从哪里开始解决这个问题,我很乐意分享。