2

我正在尝试从 vb.net 2005 调用第 3 方供应商的 C DLL,但P/Invoke出现错误。我成功地调用了其他方法,但在其中一个更复杂的方法上遇到了瓶颈。所涉及的结构非常可怕,为了简化故障排除,我想创建一个 C++ DLL 来复制问题。

有人可以为可以从.Net 调用的 C++ DLL 提供最小的代码片段吗?我的Unable to find entry point named XXX in DLLC++ dll 出现错误。它应该很容易解决,但我不是 C++ 程序员。

我想为 DLL 使用 .net 声明

Declare Function Multiply Lib "C:\MyDll\Debug\MyDLL.DLL" Alias "Multiply" (ByVal ParOne As Integer, ByVal byvalParTwo As Integer) As Integer
4

3 回答 3

2

尝试在您的 C++ 函数声明中使用__decspec(dllexport)魔法粉。此声明设置了从 DLL 中成功导出函数所需的几项内容。您可能还需要使用 WINAPI 或类似的东西:

__declspec(dllexport) WINAPI int Multiply(int p1, int p2)
{
    return p1 * p2;
}

WINAPI 设置函数调用约定,使其适合从诸如 VB.NET 之类的语言调用。

于 2008-09-02T09:13:31.043 回答
0

您可以尝试查看导出的函数(通过 DumpBin 或 Dependency Walker)并查看名称是否损坏。

于 2008-09-02T09:46:13.930 回答
0

使用 Greg 的建议,我发现了以下作品。如前所述,我不是 C++ 程序员,但只需要一些实用的东西。

myclass.cpp #include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                 )
{
    return TRUE;
}

int _stdcall multiply(int x , int y)
{
    return x*y;
}

myclass.def 库 myclass

EXPORTS

multiply @1

stdafx.cpp #包括“stdafx.h”

标准数据文件

// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_)
#define AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


// Insert your headers here
#define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers

#include <windows.h>


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_)
于 2008-09-04T12:32:49.847 回答