C++で作成したDLLは同じWindows基盤の言語であるVB.NETやC#などでも利用可能です。今回はVB.NETでの呼び出し利用例をご紹介します。
C++側
ヘッダ
呼び出す側がDLLを使う際に必要となるファイルです。
1 2 3 4 5 6 |
#pragma once extern "C" { __declspec(dllexport) void Test(char* buf); } |
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include "library.h" void Test(char* buf) { std::cout << "Cの関数が呼び出されました。" << std::endl; buf[0] = 'a'; buf[1] = 'b'; buf[2] = 'c'; system("pause"); //return true; } |
C++で作成したDLLは、VB.NETアプリのexeと同階層に出力されるように設定しておく。というか出力する。
VB.NET側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Imports System.Runtime.InteropServices Module Module1 <DllImport("Library", CallingConvention:=CallingConvention.Cdecl)> Private Sub Test(ByVal str As System.Text.StringBuilder) End Sub Sub Main() Dim a As New System.Text.StringBuilder(256) Test(a) Debug.WriteLine(a) End Sub End Moduleこ |
こうすることでC++側で作成したTest関数を使って結果を呼び出すことができています。
すごく簡単な例にはなりますがご参考になれば幸いです。
参考:DLL
ダイナミックリンクライブラリの略です。Windows基盤の言語(Visual C++、C#、VB.NET)であればどの言語でも作成することができ、どの言語でも呼び出すことが可能です。汎用性の高い関数などがもしできて他の言語の開発でも流用したい場合などに書き出したりします。
複数のDLLを実行ファイル(.exe)から呼び出すことも可能です。私の過去の実務では以下のような要件で利用しました。
- C++でしか利用できないライブラリをVB.NET側から呼び出したい場合
この記事へのコメントはありません。