在一个解决方案中用C#测试调用C++ DLL

VS2015,在解决方案中新建一个C++ DLL项目,一个C# Winform项目;

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;
}

这个是自动生成;case DLL_xxxx_xxxx,这几个是DLL消息;

stdafx头文件和C文件不用管;

DllTest2.cpp里面添加3个函数;

#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里面为三个函数添加导出说明;说明此dll导出的3个函数;

#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;
        }
    }
}

生成解决方案;此处C#调用写的是DLL生成的绝对路径;C#不用引用DLL项目;每次修改了dll代码,重新生成解决方案;

启动C#项目;可以测试调用C++ DLL了;

发布了435 篇原创文章 · 获赞 512 · 访问量 294万+

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/104085319