###前提・実現したいこと
Visual Studio 2015上で、以下を作成しています。
【環境】
ソリューション名:TEST(以下1) 2)のプロジェクトを含む)
- プロジェクト1:LLS
・ASP.NET Webアプリ
・[新しいプロジェクト]-[Visual C#]-[ASP.NET webアプリケーション]-[ASP.NET4.5.2テンプレート]のMVC選択 で生成
2) プロジェクト2:Wrapper
・c++/cli dll
・[新しいプロジェクト]-[Visual C++]-[空のCLRプロジェクト] で生成後、構成プロパティの構成の種類を[ダイナミック ライブラリ(.dll)]に変更
【やりたいこと】
過去資産のwin32 API(func.h, func.dll, func.libのみ存在)の関数を、上記1)から上記2)を経由して使用したい
【現在のプログラム】
1)プロジェクト1 c#のHomeController.csの内容
using System; using System.Collection.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Wrapper; //for プロジェクト2 namespace LLS.Controllers { public class HomeController:Controller { public ActionResult Index() { Wrap cls = new Wrap(); cls.func_1(); return View(); } 以下省略
- プロジェクト2 c++/cli のWrapper.h、Wrapper.cpp
//Wrapper.h #pragma once using namespace System; namespace Wrapper{ public ref class Wrap { public: void func_1(); }; }
//Wrapper.cpp using namepace System; #include "func.h" //for win32 API #include "Wrapper.h" #pragma comment(lib, "func.lib") //for win32 API namespace Wrapper { void Wrap::func_1() { int ret = DLL_Func1(); //for win32 API } }
【ビルド手順】
- 上記プロジェクト2(c++/cli)のビルド
・構成プロパティ-[全般]-[出力ディレクトリ] をプロジェクト1の$(SolutionDir)\LLS\bin\Debug\に設定
・構成プロパティ-[リンカー]-[追加の依存ファイル] でfunc.lib(win32 API)を追加
・ビルド実行 → Wrapper.dllの生成を確認
- 上記プロジェクト1(c#)のビルド
・ソリューションエクスプローラのLLS下の参照で[参照の追加]-Wrapper.dllを追加
・ビルド実行 → LLS.dllの生成を確認
###発生している問題・エラーメッセージ
両プロジェクトのビルド後に、Visual Studio 2015で[F5]を押し、実行させると、
ブラウザが表示し、以下のエラーが表示されます。
'/'アプリケーションでサーバー エラーが発生しました。 ファイルまたはアセンブリ'Wrapper.DLL'、またはその依存関係の1つが読み込めませんでした。指定されたモジュールが見つかりません。
###補足情報
・プロジェクト2のWrapper.cppで、//for win32 API部分をコメントアウトし、func_1()内に適当な関数を記載し、ビルド→実行させると動作します。したがって、win32 APIの部分が問題だと予想しております。
・ソリューションエクスプローラのプロジェクト2(LLS)下の参照で[参照の追加]-func.dllを追加しようとしましたが、『"~\func.dll"への参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください』とのエラーが発生します。
色々理解できていない点が多いため、記載内容に不十分な点があると思いますが、
どうぞよろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。