C++函数怎么在VB使用
有几个C++的函数,但是不会C++的窗口制作,想到用VB来做界面。但是怎么让vb调用C++的函数呢?可以把C++中的函数变成DLL的给VB调用吗?如果可以怎么生成DLL文...
有几个C++的函数,但是不会C++的窗口制作,想到用VB来做界面。但是怎么让vb调用C++的函数呢?
可以把C++中的函数变成DLL的给VB调用吗?如果可以怎么生成DLL文件并在VB中调用。 展开
可以把C++中的函数变成DLL的给VB调用吗?如果可以怎么生成DLL文件并在VB中调用。 展开
2个回答
展开全部
可以把C++中的函数变成DLL的给VB调用。
一、首先,使用vs2008创建windows32控制台程序,选择dll复选框,确定。
然后在stdafx.h头文件中声明导出函数,举例如下
__declspec(dllexport) int add(int a ,int b);//add是函数名,可声明多个
__declspec(dllexport) int sub(int a ,int b);
如果创建的是C++工程则需要在函数声明前加上extern "C"
变成: extern "C" __declspec(dllexport) int add(int a ,int b);
extern "C" __declspec(dllexport) int sub(int a ,int b);
接着在你创建的C文件中实现上述函数体,如下
int __declspec(dllexport) add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
这个是C++中,如果仅仅使用一个c文件实现dll,举例如下
#include <windows.h>
__declspec(dllexport) int add(int a ,int b);
__declspec(dllexport) int sub(int a ,int b);
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;
}//这段代码c++工程自动生成
__declspec(dllexport) int add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
二、C调用dll
在创建一个新的工程。把之前生成的dll文件拷贝入调用工程的debug文件夹下。如果想方便,就顺便把lib文件也拷贝到debug下,因为三要用。键入如下代码:
#include<stdio.h>
#include <windows.h>
int main()
{
typedef int (*ADD)(int ,int);//函数指针类型
HINSTANCE Hint = LoadLibrary("adddll.dll");//加载我们刚才生成的dll
ADD add = (ADD)GetProcAddress(Hint,"add");//取得dll导出的add方法
printf("%d",add(3,4));
return 0;
}
当提示错误error C2664: “LoadLibraryW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR” 时,需要步骤三。
三、C调用lib,
把上述工程生成的lib文件拷入建立的工程下,然后在代码中加入如下语句
#pragma comment(lib,"adddllcpp.lib")
extern int add(int ,int);//没有加这句而只加上面这句(或在工程设置里加上DLL.lib)会链接错误
extern int sub(int ,int);
注意:工程属性字符集必须改成“使用多字节字符集”。
一、首先,使用vs2008创建windows32控制台程序,选择dll复选框,确定。
然后在stdafx.h头文件中声明导出函数,举例如下
__declspec(dllexport) int add(int a ,int b);//add是函数名,可声明多个
__declspec(dllexport) int sub(int a ,int b);
如果创建的是C++工程则需要在函数声明前加上extern "C"
变成: extern "C" __declspec(dllexport) int add(int a ,int b);
extern "C" __declspec(dllexport) int sub(int a ,int b);
接着在你创建的C文件中实现上述函数体,如下
int __declspec(dllexport) add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
这个是C++中,如果仅仅使用一个c文件实现dll,举例如下
#include <windows.h>
__declspec(dllexport) int add(int a ,int b);
__declspec(dllexport) int sub(int a ,int b);
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;
}//这段代码c++工程自动生成
__declspec(dllexport) int add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
二、C调用dll
在创建一个新的工程。把之前生成的dll文件拷贝入调用工程的debug文件夹下。如果想方便,就顺便把lib文件也拷贝到debug下,因为三要用。键入如下代码:
#include<stdio.h>
#include <windows.h>
int main()
{
typedef int (*ADD)(int ,int);//函数指针类型
HINSTANCE Hint = LoadLibrary("adddll.dll");//加载我们刚才生成的dll
ADD add = (ADD)GetProcAddress(Hint,"add");//取得dll导出的add方法
printf("%d",add(3,4));
return 0;
}
当提示错误error C2664: “LoadLibraryW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR” 时,需要步骤三。
三、C调用lib,
把上述工程生成的lib文件拷入建立的工程下,然后在代码中加入如下语句
#pragma comment(lib,"adddllcpp.lib")
extern int add(int ,int);//没有加这句而只加上面这句(或在工程设置里加上DLL.lib)会链接错误
extern int sub(int ,int);
注意:工程属性字符集必须改成“使用多字节字符集”。
追问
想在vc++6.0上做,能教我具体的步骤吗?如果可以从新建开始教,不然给我代码我也不知道该写在那里。
顺便问一下dll的函数可以调用自己dll的函数吗?
展开全部
可以制作DLL给VB用。
首先你要学习如何将你的函数正确导出给vb(其实就是 __declspec(dllexport) 和 __stdcall,必要时还有 extern "C" ,上网搜一下应该很容易找到教学)
然后你确定dll导出的函数的名字以后(对,可能和你代码写的不同),在vb里用declare声明函数(上网搜教学去……)
之后你就可以直接调用declare声明的那些函数了。运行的时候系统会去加载dll、执行里面的函数
dll要和vb生成的exe放在同一个文件夹下,或者把dll丢到 c:\windows\system32 里面
首先你要学习如何将你的函数正确导出给vb(其实就是 __declspec(dllexport) 和 __stdcall,必要时还有 extern "C" ,上网搜一下应该很容易找到教学)
然后你确定dll导出的函数的名字以后(对,可能和你代码写的不同),在vb里用declare声明函数(上网搜教学去……)
之后你就可以直接调用declare声明的那些函数了。运行的时候系统会去加载dll、执行里面的函数
dll要和vb生成的exe放在同一个文件夹下,或者把dll丢到 c:\windows\system32 里面
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询