2
情况很简单。我在一个DLL(DLL1)中打开文件并在另一个(DLL2)中关闭它。我调用陆续在python脚本两个DLL文件之一,它的代码如下:C++&python关闭并打开不同的dll文件
from ctypes import *
DLLFP1=r"C:\Workspaces\CPP\Test\build\files1.dll"
DLLFP2=r"C:\Workspaces\CPP\Test\build\files2.dll"
DLL1=cdll.LoadLibrary(DLLFP1)
DLL2=cdll.LoadLibrary(DLLFP2)
cppobj=c_void_p()
DLL1.open(byref(cppobj))
DLL2.close(cppobj)
DLL1代码:
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT void open(ofstream* &f){
f = new ofstream();
string FP("c:\\teest.log");
f->open(FP);
}
和DLL2代码:
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT void close(ofstream* f){
f->close();
}
在结果我有“访问违规写作”。我也可以正常写入文件从DLL2文件,如果我移动关闭功能DLL1它工作正常。我使用英特尔编译器。操作系统是Windows7。
问题是什么错?在DLL之间共享文件的正确方法是什么?
非常感谢您提前。
相关:[C++ 11地址是否考虑在动态/共享库边界之间传递std库对象?](http://programmers.stackexchange.com/questions/176681/did-c11-address-concerns-通过std-lib-objects-between-dynamic-shared-librar) – robyschek
尝试将两个dll与动态C运行时连接,用MS的cl.exe它是'/ MD'开关 – robyschek
我试过了,不幸的是,帮助。 –