私はC++ Win32
のプログラムを作成しています。このプログラムでは、テキストファイルを作成しています。このC++プログラムはDLLを生成し、ASP.NET WebアプリケーションでこのDLLを参照しています。
P/Invokeを使用して、このDLLからファイルを読み書きするメソッドを呼び出しています。ASP.NETでのP/Invoke(dllからのテキストファイルの読み込み/書き込み)
私はこれをWP /アプリケーションでWPFアプリケーションでテストしたところ、dllはうまく動作しています。 リファレンスDLLはこのWPFアプリケーションのbin/Debug
フォルダにあり、呼び出されるとdllの書き込みメソッドは同じフォルダにテキストファイルを生成します。 さらに、from the same folder
、私はテキストファイルを読むためにdllのreadメソッドを使うことができます。
しかし、私がASP.NET WebアプリケーションからDllメソッドを呼び出すと、遺伝子操作されたファイルは他のディレクトリに移動します(おそらく、dllは実行のために他の場所にロードされているためです) (エラーなし)
デスクトップアプリケーションと同じように、binフォルダー自体から読み込むことができるように、binフォルダー自体にfieが書き込まれる方法はありますか?
例コード:
.cppファイル
extern "C" D_API int Write1()
{
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 1;
}
extern "C" D_API char* Read1()
{
ifstream myReadFile;
myReadFile.open("test.txt");
char output[100];
if (myReadFile.is_open())
{
while (!myReadFile.eof())
{
myReadFile >> output;
}
}
return output;
}
C#の.aspx.cs
[DllImport("Testing1.dll", EntryPoint = "fnTest", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int Write1();
[DllImport("Testing1.dll", EntryPoint = "ReadTest", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern StringBuilder Read1();
..andは、デフォルトの作業ディレクトリを使用した場合も、アクセス許可の問題を持つことができます - 例えばIISプロセスが書き込めないディレクトリで終わる可能性があります。 – MiMo
@MMo真実ですが、あなたがファイルを望む場所ではないという事実は、本当にキラーです。 –
確かに - 現在の作業ディレクトリを使いこなすのが最善である理由をもう一つ追加したところです。 – MiMo