VS2015、ソリューション、C#WinフォームプロジェクトでのC ++ DLLプロジェクトを作成します。
dllmain.cpp;
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
これは自動的に生成され、場合DLL_xxxx_xxxxが、これらは、DLLメッセージです。
stdafx Cヘッダファイルと制御ファイルではありません。
3つの機能を追加しDllTest2.cpp。
#include "stdafx.h"
#include "DllTest2.h"
#include <string.h>
DllTest2_API int __stdcall Add(int a, int b)
{
return a + b;
}
DllTest2_API int __stdcall Multitwo(int a, int b)
{
return a * b;
}
DllTest2_API char __stdcall getc1(char c1)
{
return c1;
}
三つの関数として示されているエクスポートDllTest2.hを追加し、この導関数3のDLLの説明;
#define DllTest2_API __declspec(dllexport)
EXTERN_C DllTest2_API int __stdcall Add(int a, int b);
EXTERN_C DllTest2_API int __stdcall Multitwo(int a, int b);
EXTERN_C DllTest2_API char __stdcall getc1(char c1);
テストと呼ばれるC#プロジェクト。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace test2
{
public partial class Form1 : Form
{
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static int Add(int a, int b);
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static int Multitwo(int a, int b);
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static char getc1(char c1);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int c = Add(100, 67);
textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
private void button2_Click(object sender, EventArgs e)
{
int c = Multitwo(99, 7);
textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
private void button3_Click(object sender, EventArgs e) //char 测试
{
char c1 = 'f';
char d1 = getc1(c1);
textBox1.Text = textBox1.Text + d1 + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
}
}
溶液を構築し、ここで、DLLはC#で書かれているコールの絶対パスを生成し、DLL C#プロジェクトを参照しない、DLLコードの各変更は、溶液を再構築します。
スタートC#プロジェクト、あなたがC ++ DLLの呼び出しをテストすることができます。