ナナエフ

同人ゲームサークル『7-FIELD』制作ブログ  -ゲーム制作やイベント参加などの活動情報 + 雑記-

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

ExcelVBAよりC#モジュール呼び出し時の、動作不具合原因

tetsuwoです。 【 twitter

久々に少し技術的な話。


ExcelVBAマクロの"Shell"コマンドにて、VisualC#で作成したexeを呼びだした際に

動作途中で応答なしになってしまう原因がわかったのでメモ。
 
 
実はVBAからの呼び出しだけでなく、目的のexeを直接起動させない場合は全て起こっていた。

例えば、exe呼び出し命令のみを記述したC言語プログラムでも、同様に応答なしになる。



途中までは問題なく動作しているので、呼び出し自体は問題なし。

引数や戻り値のせいではなかった。



原因は、C#モジュール内の相対パス指定。


C#のモジュールでは、外部ファイルとして画像を読み込んでいるのだが

exeと同階層にあるフォルダの画像を指定している。

そのパス指定を 「.\画像格納フォルダ\画像ファイル.png」 としていたが

ここでフォルダが見つからずにエラーが起こっていた。



exeファイルの絶対パスを取得するため、下記のように変更したら解決。

─────────────────────────────────────

// exeの絶対パス取得 (ドライブ名:\\~~\~~\モジュール名.exe"
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
string ass_path = ass.Location;

// 絶対パスから「\モジュール名.exe"」を削除
ass_path = ass_path.Remove(ass_path.LastIndexOf('\\'));

// 画像ファイルパス指定
string pic_path = ass_path + "\画像格納フォルダ\画像ファイル.png";

─────────────────────────────────────


VBAを動作させるエクセルを、exeと同階層に置いてもダメだったが

その場合の相対パスはどこを指定していたのだろうか・・・?
 
スポンサーサイト
  1. 2012/10/16(火) 23:59:09|
  2. 制作
  3. | トラックバック:0

トラックバック

トラックバック URL
http://7fblog.blog.fc2.com/tb.php/87-513b7cbd
この記事にトラックバックする(FC2ブログユーザー)

カウンター

プロフィール

akinasi, tetsuwo

Author:akinasi, tetsuwo
FC2ブログへようこそ!

検索フォーム

カレンダー

05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

告知 (63)
制作 (88)
ソフト紹介 (19)
素材紹介 (10)
言外 (7)
雑記 (361)
ナナエ (29)

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。