1 主cpp和.h都是为编写一个dll作的,原来我未添加另外2个函数实现的时候dll是正常可以被使用的。
2 cpp的内容都是函数,大部分是以类似short __declspec(dllexport) __stdcall修饰声明的,最后出现在classview里面的gloab文件夹下面
3 .h的内容是对应cpp中提供给外部使用的函数的声明。
4 我当时添加自己函数的时候,是首先在cpp中写的实现,然后在.h中写了声明,声明和实现都是参照原先正确的来作的。可是给delphi写的程序调用的时候说我后面加的两个函数无法定位输入点,不知道有人知道原因么
2 cpp的内容都是函数,大部分是以类似short __declspec(dllexport) __stdcall修饰声明的,最后出现在classview里面的gloab文件夹下面
3 .h的内容是对应cpp中提供给外部使用的函数的声明。
4 我当时添加自己函数的时候,是首先在cpp中写的实现,然后在.h中写了声明,声明和实现都是参照原先正确的来作的。可是给delphi写的程序调用的时候说我后面加的两个函数无法定位输入点,不知道有人知道原因么
请问你说的delphi工具在哪里?因为两个地方就多点人看啊我应该是静态调用
.cpp
short __declspec(dllexport) __stdcall a()
{
}
.h
short __declspec(dllexport) __stdcall a();delphi中有个专门的接口单元类似这样的声明了
function a:SmallInt; Stdcall external SDK_FILE name 'a';
然后我使用就直接a();可是一运行就找不到输入点,其次对应dll的变化,我当时就按照接口单元里面的形式,添加了相应函数的声明
因为原来这样定义就没什么问题
我只不过照着别人的代码添加了两个函数,按说不是声明这样细节的问题吧?
怎么导出函数?请详细点好么?
可是我看网上的示例基本都是将 lib变成dll啊?不知道怎么用了,我是新手,请给出具体的使用好么?3q了
short __declspec(dllexport) __stdcall a()
{
}
.h
short __declspec(dllexport) __stdcall a();原型就是如此,我那两个函数就是这样定义的啊不过参数我就没写出来了
extern "C" __declspec(dllexport) short __stdcall a();
extern "C" __declspec(dllexport) short __stdcall b();.cpp
short __stdcall a()
{
}short __stdcall b()
{
}Delphi中:
function a: Shortint; stdcall; External 'YourDLL.dll';
function b: Shortint; stdcall; External 'YourDLL.dll';
用Program Files\Borland\CBuilder6\Bin\coff2omf.exe转换就了!
主持人注:coff2omf可以转换微软的COFF格式为Borland使用的OMF格式。但是这个工具有一些限制:转换一般的C函数还可以,转换C++类有困难;这个工具在处理新版本的VC++生成的库时可能有问题。
另外,可以参考“Using Visual C++ DLLs in a C++Builder Project”http://www.bcbdev.com/articles/vcdll.htm和http://www.bcbdev.com/articles/vcdll2.htm
据说VC的lib文件跟BCB不通用不过你也不用急啊,有dll文件可以自已生成lib文件滴implib filename.lib filename.dll就可以生成一个lib
如果你有DLL的话可以用IMPLIB从DLL中生成符合BCB要求的LIB文件。也可以用COFF2OMF来转换LIB文件的格式。
因为原来这样定义就没什么问题
我只不过照着别人的代码添加了两个函数,按说不是声明这样细节的问题吧?
老大我又重复一遍了,因为在我添加函数之前,其他能正常工作的函数都是类似我上面给的原型那样的声明的,所以我觉得不是声明的问题。
在那个def文件里面我没有写我添加的那两个函数
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//请问你的cpp文件中有没有这样的注释?