質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

Q&A

3回答

7549閲覧

ASP.NET Webアプリケーションで、C++で書かれたDLLを読み込む方法

abe.zikuu

総合スコア22

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

0グッド

1クリップ

投稿2015/04/10 01:40

Visual Studio2013で開発しており、ASP.NET Webアプリケーションで、C++で書かれたDLLを読み込もうとしています。ちなみにDLLは同じくVisual Studioのクラスライブラリのプロジェクトで作りました。
そして現状Hello WorldをDLL内から呼び出して表示は出来たのですが、どうやら構造体を読み込むあたりを読み込みをするとweb側で表示出来ませんとなります。情報が少ないですが、この問題ってどなたかわかりますか?質問があれば都度お答えします。書き簡単に状況を記載しました。

BBB test;
namespace AAA{
String^ AAAClass::getMessage(){
BBB.b();
return c[2];
}
}

void BBB::b(){
CCC c;
}

struct CCC{
double c[3];
CCC(){
c[0] = 1.0;
c[1] = 2.0;
c[2] = 3.0;
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BlueMoon

2015/04/10 07:21

C++のコードからASP.NETのコントロール(Button,Gridなど)利用を想定されているのでしょうか。 それともCGIとして実装しHTMLから呼び出す用法を想定されていますか?
abe.zikuu

2015/04/10 07:51

C++で計算をして、そのデータをJSでレンダリングするといった感じです。
yohhoy

2015/04/10 13:59

C#コードから、C++記述されたDLL内の関数を呼び出したいという意味ですか?C++はC++/CLIではなく、ネイティブのC++ですか?
guest

回答3

0

以前に似たようなことをしたことがあります。
Hello Worldが表示できたとのことですが、どういう実装方法でしょうか?
私の場合は
native c <-> c++/cli <-> ASP.Net(C#)
という形で間にc++/cliの薄いラッパーをかましました。
c内の構造体もクラスにし、値へのアクセスもプロパティを経由します。

lang

1public ref class DotNet 2{ 3internal: 4 NATIVE *native; 5public: 6 DotNet() { 7 native = new NATIVE(); 8 } 9 ~DotNet() { 10 if (native != NULL) { 11 delete native; 12 native = NULL; 13 } 14 } 15 property int IntValue { 16 int get() { return native->intValue; } 17 void set(int value) { native->intValue = value; } 18 } 19};

DllImportを使ってnative c <-> ASP.Netとする場合はcの型と.NETの型を正しく変換しないといけません。
https://msdn.microsoft.com/ja-jp/library/ac7ay120(v=vs.110).aspx
構造体も

lang

1[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 2public struct NATIVE 3{ 4 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] 5 public char[] charValue; 6 public int intValue; 7}

のように厳密に定義しないとうまくいかない場合があります。

cliを使う方が手間はかかるものの、コンパイル時にエラーが検出できるので、おすすめです。

投稿2015/04/17 09:30

caster

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

記載されているソースはDLL側のソースだと判断しますが、これを見る限りDLLのビルドも失敗するように思えます。これでDLLが正常に作成されていますでしょうか?
質問をするのに際して要点だけ抽出したソースだとおそらく転記ミスだと思いますので、もう少し開示可能な範囲でソースを公開していただけると回答が付きやすいと思います。

投稿2015/04/15 08:30

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++で作成したDLLをインポートする方法は、私には見つけられませんでした。方法は有るかも知れないのですが、DLLを参照できるようにするには.NetFrameworkの様式に従って各種設定が必要と思われ、ハードルが高いのではないかと思われます。

「JSでレンダリングをする」用途をお考えで有れば、VisalStudioのWebDeveloperでコントロールを配置したコーディング(ASP.NETの通常の開発方式)も必要になります。JSを直接記述することもできますが、それではVSを採用したメリットが減るように思えます。以上をふまえてですが、C++で実装予定の部分もC#でコーディングし、VSのprojectとして完結する構成を検討されては如何でしょうか。
ご要望の回答でなくて済みません、ご参考までに。

投稿2015/04/10 08:43

BlueMoon

総合スコア1339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問