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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

10601閲覧

VC++からVBで作成したdllを読み込む方法

Praline

総合スコア46

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2016/06/23 16:21

VS2013を使用して、現在c++を勉強しております。

共通処理部分をVBで作成しており、c++のプロジェクトからそのdllを読み込む方法を探しております。

Public Class CallDllTest Private _int As Integer Public Sub New() _int = 100 End Sub Public Function getInt() As Integer Return _int End Function End Class

そもそもc++の理解がないのですが、以下についてご教授お願いします。

  • vc++で、dllの参照を追加する方法

import? include?

  • vc++からこのクラスのインスタンスを生成する方法

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

VC++からVB.NETで作ったクラスを利用することは可能です。ただし、C++標準にはそのような機能はなく、C++/CLIというC++をさらに拡張した言語になります。C++標準の部分とC++/CLIの拡張部分は「全く異なる仕組み」で動いているため、C++の理解がない状態で両方使うのは、混乱を招いてむしろ勉強の妨げになると思うのであまりお勧めできませんが……。

とりあえず、以下の手順で使えるようにはなります。

  • C++のプロジェクトのプロパティを開き、「構成プロパティ」の「全般」にある設定項目「共通言語ランタイム サポート」を「共通言語ランタイム サポート(/clr)」に設定
  • C++ソースに#using "DLLファイルパス"を追加
  • gcnewでインスタンス化し、ハンドル(^)で受け取る

コード例

C++

1#include <iostream> 2#using "CallDllTest.dll" // DLLファイルが見つからないとエラーになるのでパスは適切に設定すること 3 4int main() 5{ 6 CallDllTest::CallDllTest^ test = gcnew CallDllTest::CallDllTest(); 7 int x = test->getInt(); 8 std::cout << x << std::endl; 9 return 0; 10}

DLLファイルはEXEと同じフォルダーに格納してください。

投稿2016/06/23 22:00

catsforepaw

総合スコア5938

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

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

Praline

2016/06/23 23:03

例のご提示ありがとうございます。 早速試したのですが、「error C1189: #error : <atomic> is not supported when compiling with /clr or /clr:pure.」というエラーが表示されました。 もしかして何かしら設定がおかしいでしょうか…
catsforepaw

2016/06/24 00:14

<atomic>ヘッダーをインクルードしているようですね。<atomic>は/clrオプション付きでのコンパイル時はサポートされないようです。 → https://msdn.microsoft.com/ja-jp/library/hh874894(v=vs.140).aspx <atomic>を使いたい場合は、メインの処理は通常のC++でコンパイルし、VBクラスの呼び出しをラップしたスタティックリンクライブラリを作って/clr付きでコンパイルしてリンクするという方法を取るしかなさそうです。
catsforepaw

2016/06/24 02:16 編集

もしかしたらライブラリを作らなくても良いかもしれません。 Visual Studioだとソースファイル毎に個別にオプションを設定することもできるので、VBクラスを使用する部分のソースを分けて、そのソースのプロパティの「共通言語ランタイム サポート」を設定すれば良さそうな気がします。 ……と思ったのですが、試したら他のオプションと絡み合ってうまくできませんでした。やはりライブラリ化しないとダメそうです。
Praline

2016/06/24 13:06

ありがとうございます、やはり自分の勉強不足のため、ライブラリからのコンパイル…という部分が概念として理解できませんでした…申し訳ないです。 単純にatomicを使わずにコンパイルができればと思ったのですが…
Praline

2016/06/25 13:42

すみません、プリコンパイル済みヘッダが悪さをしておりました。 ご助言いただいた内容にて、dllを呼び出すことが出来ました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問