我已经有了一个窗DLL我写的,编写的C/C++(所有出口的功能是'C')。DLL工作的现我在VC++.我已经给DLL到另一家公司谁做的他们所有的发展中VB。他们似乎是有问题的链接的功能。我没有用VB在十年,我甚至没有安装。可能是什么问题吗?

我已经声明我所有的公共职能如下:

#define MYDCC_API __declspec(dllexport)


MYDCCL_API unsigned long MYDCC_GetVer( void);
.
.
.

任何想法?


终于得到了回到这个今天有它的工作。答案把我放在正确的轨道,但我找到这个最有帮助:

http://www.codeproject.com/KB/DLL/XDllPt2.aspx

此外,我有几个问题通过串DLL的功能,我发现这有帮助:

http://www.flipcode.com/archives/Interfacing_Visual_Basic_And_C.shtml


有帮助吗?

解决方案

通过使用 __declspec 对于出口,名称的功能将得到出口 错位, 即含有类型的信息,以帮助C++编译器解决过载。

维生素b6无法处理的损坏名。作为一种解决办法,你必须去损坏的名称。最简单的解决方案是链接DLL文件的使用 出口定义 文件在VC++.出口定义的文件是非常简单,只是包含的名称DLL和列表的出口功能:

LIBRARY mylibname
EXPORTS
    myfirstfunction
    secondfunction

此外,必须指定 stdcall 呼吁《公约》,因为这是唯一的呼吁《公约》的维生素b6可以处理。有一个项目,利用大会注射处理C电话但我想你不想要使用这个艰难和容易出错的方法。

其他提示

尝试增加__的末端

#define MYDCC_API __declspec(dllexport) __stdcall

我们有一些用C++dll互动与我们的旧应用程序的维生素b6他们都有那在末端。

一个维生素b6DLL始终是一个COM dll。我将描述一个示例,因为几句话,作为可能。假设有一件DLL项目中的维生素b6有一类称为CTest其中包含的方法如下所示

公共职能vbConcat(果你正在调试一如串,果你正在调试b As String)As String vbConcat=a&b 结束功能

和你已经设置的项目名称为VBTestLib在维生素b6项目的性质和 你已经编制了项目F:\proj\VB6\ActiveXDLL\VBTestDLL.dll

你需要注册dll使用的Windows的命令 regsvr32F:\proj\VB6\ActiveXDLL\VBTestDLL.dll

现在你C++编码:

#进口"F:\proj\VB6\ActiveXDLL\VBTestDLL.dll" 使用的名称空间VBTestLib;

void CDialogTestDlg::OnButton1() {

 HRESULT hresult;
 CLSID clsid;
 _CTest *t; // a pointer to the CTest object
 _bstr_t bstrA = L"hello";
 _bstr_t bstrB = L" world"; 
 _bstr_t bstrR;
 ::CoInitialize(NULL);
  hresult=CLSIDFromProgID(OLESTR("VBTestLib.CTest"), &clsid);
  hresult= CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
                               __uuidof(_CTest),(LPVOID*) &t);
  if(hresult == S_OK)
  {
     bstrR  = t->vbConcat(bstrA , bstrB);
     AfxMessageBox((char*)bstrR);
   }

}

就是它,开始关闭。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top