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

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

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

Re[4]: メインのソースがFileNotFoundException


(過去ログ 66 を表示中)

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

■38327 / inTopicNo.1)  メインのソースがFileNotFoundException
  
□投稿者/ DD. (7回)-(2009/07/10(Fri) 22:44:24)

分類:[C#] 

お世話になります。DD.です。

環境は VC++・C# の 2008 Express & XP です。

C++で「class __declspec( dllexport ) Derived」クラスを作成し、DLL化した後、
C++/CLIでmanagedな「CPlusLibWrapper::Wrapper」クラスを作成して「Derived」クラスをラップしました。

それをDLL(アセンブリ)化して C# で「CPlusToCS」というプロジェクトを作成し、
そのDLLを参照の追加から「参照」追加しました。
後は C# の Mainメソッド内から Wrapperクラスをインスタンス化しただけのサンプルを作成したのですが、
コンパイルは問題なく、実行時にタイトルの通りの現象が起こってしまいます。

FileNotFoundExceptionが発生し、
デバッガで詳細を見てみると、

{"指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)":null}

Source:"CPlusToCS"
StackTrace:
" 場所 CPlusToCS.Program.Main(String[] args)\r\n 場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)\r\n 場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)\r\n 場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()\r\n 場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)\r\n 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n 場所 System.Threading.ThreadHelper.ThreadStart()"

となっていました。

なぜこのような事象が起こってしまったのか検討がつかず、
質問させて頂きました。

何が原因となっているのでしょうか?
他に必要な情報がありましたら、提示させてもらいます。

ちなみに、いずれのコードもただのサンプルで作成しただけですので、シンプルなものになっています。
以下、C# のコードのみ抜粋

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CPlusLibWrapper;

namespace CPlusToCS
{
class Program
{
static void Main(string[] args)
{
using (Wrapper wrapper = new Wrapper())
{
wrapper.Print();
Console.ReadLine();
}
}
}
}

引用返信 編集キー/
■38329 / inTopicNo.2)  Re[1]: メインのソースがFileNotFoundException
□投稿者/ オショウ (265回)-(2009/07/10(Fri) 23:05:42)
> コンパイルは問題なく、実行時にタイトルの通りの現象が起こってしまいます。

  あくまで推測・・・
  C++で作成したDLLが、C#プログラムの実行形式のところに無いのでは?
  マネージドなDLLは、コピーされますが、C++のDLLはコピーされなかった
  はず・・・

  ご確認下さい。

以上。
引用返信 編集キー/
■38330 / inTopicNo.3)  Re[2]: メインのソースがFileNotFoundException
□投稿者/ DD. (8回)-(2009/07/10(Fri) 23:47:46)
残念ながらC#プロジェクトのDebugフォルダ内にDLLがコピーされていることを確認しました。。。

引用返信 編集キー/
■38332 / inTopicNo.4)  Re[3]: メインのソースがFileNotFoundException
□投稿者/ オショウ (266回)-(2009/07/11(Sat) 08:05:37)
> 残念ながらC#プロジェクトのDebugフォルダ内にDLLがコピーされていることを確認しました。。。

  それは、ご自身でコピーされた・・・と言うことですネ!

  試しに作ってみましたが、EXEのあるところにC++のDLLはコピー
  されませんでした。マネージドなC++/CLIのDLLがコピーされたのみ。

  そのまま実行すると、『FileNotFoundException』が発生しました。
  C++のDLLをコピーすると当然、正常動作・・・

※ 因みに、C++/CLIのDLLからC++のDLLの呼び出し方は、LoadLibrary?
  それともLIBのリンクでの直接呼び出し?

以上。
引用返信 編集キー/
■38333 / inTopicNo.5)  Re[3]: メインのソースがFileNotFoundException
□投稿者/ Azulean (414回)-(2009/07/11(Sat) 08:23:38)
No38330 (DD. さん) に返信
> 残念ながらC#プロジェクトのDebugフォルダ内にDLLがコピーされていることを確認しました。。。
C++のDLL(と他に必要なDLL)、C++/CLIのDLL、C#のexeと一通りあるということでしょうか?


No38332 (オショウ さん) に返信
> ※ 因みに、C++/CLIのDLLからC++のDLLの呼び出し方は、LoadLibrary?
>   それともLIBのリンクでの直接呼び出し?
"class __declspec( dllexport ) Derived"なのですから、libのリンクですよね。
引用返信 編集キー/
■38414 / inTopicNo.6)  Re[4]: メインのソースがFileNotFoundException
□投稿者/ DD. (9回)-(2009/07/13(Mon) 20:24:58)
返答が遅くなりすみません。

C++/CLIで作成したDLLは勝手にコピーされていましたが、VC++で作成したDLLはなかったので、
手動でコピーしてもってきたら動きました。
(ちなみにlibリンクです)

ご指摘の通りでした。ありがとうございます。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -