【发布时间】:2016-01-18 03:12:02
【问题描述】:
我正在尝试使此 DLL 可运行,但即使使用现成的代码也无法使其工作。
我在 c++ 中从 Visual Studio 创建了一个简单的 DLL(win32 项目) 我有这 2 个我使用的文件。
headerZincSDK.h
// headerZincSDK.h
#pragma once
#include <string>
#include <vector>
#if defined( WIN32 )
#include <tchar.h>
#define mdmT( x ) _T( x )
#else
#define mdmT( x ) L ## x
#endif
extern void OnEntry();
extern bool RegisterModule( const std::wstring& strName );
typedef struct
{
int formId;
}
ZincCallInfo_t;
typedef std::wstring ( *ZINC_COMMAND_CALLBACK )( const ZincCallInfo_t& info, const std::vector< std::wstring >& );
extern bool RegisterCommand( const std::wstring& strModuleName,
const std::wstring& strCommandName,
ZINC_COMMAND_CALLBACK callback );
// Helper commands for returning values
std::wstring AsString( const std::wstring& str );
std::wstring AsInteger( int value );
std::wstring AsBoolean( bool value );
还有主项目.cpp
// Project1.cpp
#include "stdafx.h"
#include "headerZincSDK.h"
using namespace std;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
void OnEntry()
{
wstring moduleName = mdmT( "TestExt" );
RegisterModule( moduleName );
RegisterCommand( moduleName, mdmT( "random" ), Command1 );
RegisterCommand( moduleName, mdmT( "reverse" ), Command2 );
}
wstring Command1 (const ZincCallInfo_t& info, const vector< wstring >& vParams )
{
//My Code
}
wstring Command2 (const ZincCallInfo_t& info, const vector< wstring >& vParams )
{
//My Code
}
问题在于它没有构建解决方案,因为它说 Command1 和 Command2 未定义
我对 c++ 一无所知,这些是我的第一步,但我可以理解很多而且很容易。
谁能告诉我我应该在这两个文件中更改什么以使其正常工作?
【问题讨论】:
-
阅读
__declspec(dllimport)和__declspec(dllexport) -
我不认为它与导入或导出有关,这是我阅读和制作的逐步配置,但它不起作用。它必须与 std 做不认识的命令的声明我将在几行中编写代码以防万一
-
我不是 C++ dll 的 epxert,但您的 command1 和 command2 函数不应该在使用前声明吗?所以把这两个函数移到 OnEntry() 上面再试一次。
-
我也进行了更改,但给我带来了一些奇怪的错误...如果我在 typedef std::wstring 的 .h 文件中没有错,则声明 2 个命令 wstring
标签: c++ visual-studio dll mdm zinc