C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ファイル作成について


(過去ログ 7 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■7393 / inTopicNo.1)  ファイル作成について
  
□投稿者/ 風影 二等兵(19回)-(2006/10/10(Tue) 16:52:56)

分類:[VC++(C++/CLI)] 


分類:[VC++(C++/CLI)] 

今DLLを使ったプログラムを作っていて、その中のプログラムなのですが、DLLとEXEはコンパイルすると正常終了するのですが実行するとエラーが出ます。
おそらくOLLのファイルのオープン(新規作成)でてこずっていると思うのですが、色々試したのですが理由がわからなく書き込みました。

DLLはVC2005で作り、EXEは.net2003C#で作っています。
どうかアドバイスを頂ければ幸いです。

DLL
---------------------------------------------------------------
extern "C" __declspec(dllexport)
int __stdcall WINAPI Dll_fileopen()
{
char *filename; /* NULL ならファイル指定なしとします */
FILE *fp;
char fname[80] = "";

if ( filename == NULL ) { /* ファイル指定なし */
fp = stdin;
} else { /* ファイル指定あり */
fopen_s(&fp ,fname, "w" );

if ( fp == NULL ) {
fprintf( stderr, "'%s'が読み込めません.\n", filename );
exit(1); /* 異常終了 */
}
}
return 0;
}
------------------------------------------------------------------
DLL呼び出し部(EXE)
------------------------------------------------------------------
class Dll
{
[DllImport("dllnew.dll")]
public static extern int Dll_fileopen();
}

private void button1_Click(object sender, System.EventArgs e)
{
Dll.Dll_fileopen();
}

0
引用返信 編集キー/
■7396 / inTopicNo.2)  Re[1]: ファイル作成について
□投稿者/ Blue 准尉(100回)-(2006/10/10(Tue) 17:03:15)

分類:[VC++(C++/CLI)] 

次回からは「図表モード」で投稿してください。
(ソースコードがインデントされます)

C言語は明に初期化しないと、値は不定です。
ですので
>char *filename;
は NULL が入っているとは限りません。
(NULLかも知れないし、変な値が入っているかもしれない)
よって、明に初期化する必要があります。

char* filename = NULL;


というか、このコードは /* ファイル指定あり */ のパスを通ることはないような気がします。
もっともらしく書くのであれば、

extern "C" __declspec(dllexport)
int __stdcall WINAPI Dll_fileopen( const char* filename )
{
FILE* fp;
if ( filename == NULL )
{
fp = stdin;
}
else
{
fp = fopen( filename, "w" );
if ( fp == NULL )
{
fprintf( stderr, "'%s'が読み込めません.\n", filename );
return -1;
}
}
return 0;
}

てな感じでしょうが。
ただ、fpはローカル変数なので、別のDLLの関数からfpを参照することは出来ません。
(しかも、fpは開きっぱなしなのでどうなるか微妙です)


0
引用返信 編集キー/
■7401 / inTopicNo.3)  Re[2]: ファイル作成について
□投稿者/ Blue 准尉(102回)-(2006/10/10(Tue) 17:12:05)

分類:[VC++(C++/CLI)] 

訂正)

> fp = fopen( filename, "w" );
> if ( fp == NULL )
> {
> fprintf( stderr, "'%s'が読み込めません.\n", filename );
> return -1;
> }
if ( fopen_s( &fp, filename, "w" ) != 0 ) // キャストが必要かも?
{
fprintf( stderr, "'%s'が読み込めません.\n", filename );
return -1;
}


0
引用返信 編集キー/
■7407 / inTopicNo.4)  Re[3]: ファイル作成について
□投稿者/ 風影 一等兵(20回)-(2006/10/10(Tue) 18:26:18)

分類:[VC++(C++/CLI)] 

Blueさん、お早い返事ありがとうございます。
一応無事出来ました。
ただやっぱりfpは無理そうですね。
テキストに少し書いてプログラムを走らせたらテキストの中身が真っ白だったので。

>次回からは「図表モード」で投稿してください。
以後気をつけます。
(注意ばかりですみません)

0
引用返信 編集キー/
■7408 / inTopicNo.5)  Re[4]: ファイル作成について
□投稿者/ 風影 一等兵(21回)-(2006/10/10(Tue) 18:27:34)

分類:[VC++(C++/CLI)] 

解決ボタン押し忘れました。(汗)

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -