状況は単純です。 1つのDLL(DLL1)でファイルを開き、別のDLL2(DLL2)で閉じます。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();
}
を私が持っている結果でIは、Pythonスクリプトの両方のDLLを次々に起動し、コードは以下の通りであります"アクセス違反書き込み"。私は通常、DLL2からファイルにテキストを書き込むことができますし、DLL1に近い関数を動かすと正常に動作します。私はintelコンパイラを使用します。 OSはWindows7です。
質問は間違っていますか? DLL間でファイルを共有する正しい方法は何ですか?
は事前にありがとうございました。
関連:[C++ 11アドレスは、動的/共有ライブラリの境界の間でstdlibオブジェクトを渡すことについて懸念していましたか?](http://programmers.stackexchange.com/questions/176681/did-c11-address-concerns-ダイナミック共有ライブラリ間のstd-lib-objectsを渡す) – robyschek
ダイナミックCランタイムと2つのdllをリンクするようにしてください。MSのcl.exeは '/ MD 'スイッチ – robyschek
私は試しましたが、残念ながら、助けてください。 –