C#C ++ DLLの呼び出しを使用して、試験溶液中の

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の呼び出しをテストすることができます。

公開された435元の記事 ウォンの賞賛512 ビュー294万+

おすすめ

転載: blog.csdn.net/bcbobo21cn/article/details/104085319