我想要编译个一个dll能够让其他应用程序调用,比如delphi编的程序能调用这个动态库
我在vc中建立一个 Win32 Dynamic-Link Library的程序,
然后建立了两个文件:lib.h和lib.cpp文件lib.h中的内容#ifndef LIB_H
#define LIB_H
extern "C" int __declspec(dllexport) __stdcall add(int x, int y); //__stdcall
#endiflib.cpp中的内容#include "lib.h"
int __stdcall add(int x, int y)
{
return x + y;
}编译完全可以通过,并且也生成了预期的dllTest.dll,但是这个动态库放在别的地方确不能正常调用,这个是为什么,我在vb中或者用vc调用,总是提示找不到 add函数的入口地址。请前辈指点。
我在vc中建立一个 Win32 Dynamic-Link Library的程序,
然后建立了两个文件:lib.h和lib.cpp文件lib.h中的内容#ifndef LIB_H
#define LIB_H
extern "C" int __declspec(dllexport) __stdcall add(int x, int y); //__stdcall
#endiflib.cpp中的内容#include "lib.h"
int __stdcall add(int x, int y)
{
return x + y;
}编译完全可以通过,并且也生成了预期的dllTest.dll,但是这个动态库放在别的地方确不能正常调用,这个是为什么,我在vb中或者用vc调用,总是提示找不到 add函数的入口地址。请前辈指点。
Ordinal^ = 1(0x00001) ,Hint = 0(0x0000) ,Function = _add@8 ,Entry Point = 0x00001005真是奇怪了,为什么我的函数名会成了_add@8了,而不是 add?
我想应该和__stdcall 这个有关,那么我在vb中调用,定义:
Declare Function add Lib "dllTest.dll" (a As Integer, b As Integer) As Integer
就是不能用,不知道为什么?
我再vb中声明了这个动态库的调用如下:
Declare Function add Lib "dllTest.dll" (a As Integer, b As Integer) As Integer
然后放了一个按钮调用:
Private Sub Command1_Click()
MsgBox add(22, 43)
End Sub
结果我编译成为可执行文件以后,单击按钮,出现错误提示:
运行时错误'453':
不能找到入口点add在dllTest.dll请 bohlee(达达)帮忙看看,处理好了,我可以多给你加分的!
但若使用LoadLibrary之类的方法调用, 应有def文件(我曾在vc6.0 sdk下测试过多次)。
我在vb中,调用 add(22,33),按理说返回值应该是55,但是返回值却成了一个负数 -5900,这个真是奇怪,请指定一下。
#pragma comment(lib, "dllTest.lib")
extern "C" int __declspec(dllimport) __stdcall add(int, int);
VC中的int是32位, VB中的integer是16位
VB中应声明如下:
Declare Function add Lib "dllTest.dll" (a As long, b As long) As long
需要这样定义:
Declare Function add Lib "dllTest.dll" (ByVal a As Integer, ByVal b As Integer) As Integer就是多了一个 ByVal 关键字问题就解决了,看样子动态库还是对的,就是在调用的时候出问题了。多谢各位进来讨论,我马上加分。