DLLからExcelを操作するには?

解決


foo  2005-08-13 03:38:04  No: 58653

VC++6.0、Windows2000環境でDLLを作成して、そのDLLの中からExcelを操作したいのですが、Excelがうまく開けません。
exe内でExcelを操作することは出来たのですが、同じことをDLL内に書いてもうまくいきません。もう2日これで悩んでいます。
どなたか助けてください。  以下、ソースを書いておきます。

//宣言
#import "C:\Program Files\Microsoft Office\Office\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")   
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace   
#import "C:\Program Files\Microsoft Office\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

using namespace Excel;
_ApplicationPtr pExcel;

//関数内
pExcel.CreateInstance(L"Excel.Application"); ←ここでクリエイトできていない様子

よろしくおねがいします(_ _(--;(_ _(--;


dairygoods  2005-08-13 06:20:12  No: 58654

エラーコードは何ですか?
単にCOMを初期化してないなんてことはないですよね。


foo  2005-08-13 09:58:33  No: 58655

レスありがとうございます
エラーは出ていないのですが

pExcel.CreateInstance(L"Excel.Application");
↑この行が実行されてもpExcelのアドレスがNULLなのです。
exe上で実行するとpExcelに正常にアドレスがとれます。
pExcelがNULLなので、当然のことながら その後の命令・・・
pExcel->Visible = true;
↑これで落ちてしまいます。

exe上で実行しているときもそうですが、comの初期化というのは
特に意識していません。これは単に当方の知識不足というのもあるのですが
初期化というのがいまいちよく分かっていないようです^^;
exeとdllで扱いが違うのでしょうか?

なにか解決のヒントになるかもしれないので少しご教授願えないでしょうか?
調べてみたのですがdllでのcomについて書かれているののが見つけられなくて…

都合のいいことばかり書いて申し訳ありませんがよろしくお願いします。


foo  2005-08-13 10:32:14  No: 58656

度々すいません

エラーコードということでしたのでGetLastError()を試してみたところ
エラーコードは2でした。"指定されたファイルが見つかりません"らしいです

ファイル……ますます混乱してきました
なんのファイルなんでしょう?

よろしくお願い致します。 o(TдT)o


foo  2005-08-13 10:50:36  No: 58657

解決しました・・・お騒がせしましたヾ(^-^;) 

CoInitialize(0);
↑これを追加したらうまくいきました。
exeでは特に何もしなくても動いたのでぜんぜん意識していませんでした。

くだらないことでスレ作ってしまってごめんなさいです。

ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加