我在VC++编写的DLL中定义:
define PORT32API _declspec(dllexport)
PORT32API long getdiskid ()
{
long id = getHardDriveComputerID (); return id;
}
在VC++中调用这个DLL没有问题,在VB6.0中定义:
Public Declare Function getdiskid Lib "aa.dll" () As Long
编译没问题,但在运行时出错,显示:getdiskid 在aa.dll中找不到入口...
why???
define PORT32API _declspec(dllexport)
PORT32API long getdiskid ()
{
long id = getHardDriveComputerID (); return id;
}
在VC++中调用这个DLL没有问题,在VB6.0中定义:
Public Declare Function getdiskid Lib "aa.dll" () As Long
编译没问题,但在运行时出错,显示:getdiskid 在aa.dll中找不到入口...
why???
解决方案 »
- MFC程序中,只要加上#include <vector>,程序就报错(在其它位置),去掉这行没问题?不明白哪里出错了?
- 用CFile 读取文本文件的第一行
- 怎么把数据库中的VarChar类型的数取出来赋给变量char a[20]???该怎么做呢?
- vc调试与运行,急!
- 弱智问题
- 多个socket 的onreceive 接收问题
- 高手指教,此问题已经开了5个贴子之多了,还是没人解决?愁啊,愁白了头,还是搞不懂!!哎。。。。没有信心了。。。
- 想学VC++ 6.0,能不能指点一下
- VC中怎样使一段文字成为注释?
- AfxBeginThread中的参数
- 怎么把form移到tab控件中?
- 请高手帮忙,给出一个关于modem编成的源码
define PORT32API _declspec(dllexport)
PORT32API extern "c" long WINAPI getdiskid();
(2)在.cpp文件中:
long WINAPI getdiskid ()
{
long id = getHardDriveComputerID (); return id;
}
(3)在.def文件中:
EXPORTS
getdiskid @1
在VB中要注册控件!
1)添加一个.DEF文件:
LIBRARY MYDLL
EXPORTS
getdiskid 2)指定 extern "C"
extern "C" PORT32API long getdiskid ()
{
long id = getHardDriveComputerID (); return id;
}
1、在VC++中新建MFC AppWizard(DLL)工程vcdll:
vcdll.cpp的代码如下:
#include "stdafx.h"
#include "vcdll.h"long sum1(); //无参类型
extern "C" int APIENTRY sum2(int i); //从VB中接收一个参数
extern "C" long APIENTRY sum3(int i,int j); //从VB中接收两个参数#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endifBEGIN_MESSAGE_MAP(CVcdllApp, CWinApp)END_MESSAGE_MAP()CVcdllApp::CVcdllApp()
{
}CVcdllApp theApp;long sum1()
{ return 100+200; }extern "C" int APIENTRY sum2(int i)
{ i+=100;
return i;
}extern "C" long APIENTRY sum3(int i,int j)
{ return i+j;
}2、在vcdll.def中的代码如下:
LIBRARY "vcdll"
DESCRIPTION 'vcdll Windows Dynamic Link Library'EXPORTS
; Explicit exports can go here
sum1
sum2
sum3
3、在编译后,把vcdll.dll拷贝到Windows目录下。
4、VB中新建标准EXE工程vb_vcdll,vb_vcdll.frm的代码如下:
Private Declare Function sum1 Lib "vcdll.dll" () As Long
Private Declare Function sum2 Lib "vcdll.dll" (ByVal i As Integer) As Integer
'声明VC库中的函数
Private Declare Function sum3 Lib "vcdll.dll" (ByVal i As Integer, ByVal j As
Integer) As LongPrivate Sub Command1_Click()
Text1.Text = sum1() '调用VC函数
End SubPrivate Sub Command2_Click()
Text1.Text = sum2(110)
End SubPrivate Sub Command3_Click()
Text1.Text = sum3(100, 250)
End Sub
extern "C" __declspec(dllexport) BOOL FAR PASCAL getdiskid ()
{
long id = getHardDriveComputerID (); return id;
}在.def中定义:
LIBRARY YourDLL
DESCRIPTION ' description'EXPORTS
getdiskid @ 1第一次编译运行一定要Copy到WINDOWS系统目录下,不然永远找不到.
此是Windows系统本身的问题.
getdiskid @1
你需要将你的函数导出供VB吊用
在VB中使用API函数的声明 指出DLL函数的文件名和函数名参数类型 就可以调用了