在 C++ 中调用 DLL,然后生产 DLL 遇到问题,求提示
本人不是做C++的,而是做FLEX AIR开发但是我的项目中需要一个DLL库
要求:用C++制作一个DLL文件,其中的功能是调用另一个DLL,并返回调用结果
我的做饭参考了这里 : http://bbs.(一个VS中建立DLL项目的教程,但其中不涉及如何去调用DLL)
我尝试了在百度搜索后得到的方法去调用DLL:LoadLibrary("capicom.dll"); (该DLL是微软提供的 用于读取数字证书)
完整代码如下:
#include "FlashRuntimeExtensions.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
extern "C"
{
HINSTANCE hDll = LoadLibrary("capicom.dll");
private static ICertificate2 x509Cert = null;
//初始化(必须的)
__declspec(dllexport) void initializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet);
//终结(必须的)
__declspec(dllexport) void finalizer(void* extData);
//被AS调用的
__declspec(dllexport) FREObject getUserList(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]);
}
extern "C"
{
//运用winAPI内置方法的方法获得的鼠标坐标。
FREObject getUserList(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
char userName[];
RSACryptoServiceProvider rsa = null;
GetSignatureKey(out rsa, out x509Cert);
subjectName = x509Cert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME);
FREObject value = argv[0];
FREObject un;
FRENewObjectFromUTF8(userName, &un);
//真正返回的是一个object类型数据,相当于{x:fX,y:fY}
FRESetObjectProperty(value, (const uint8_t*)"userName", un, NULL);
return NULL;
}
void contextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
{
*numFunctions = 1;
FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)* (*numFunctions));
//在初始化方法中声明可以被AS调用的方法
func[0].name = (const uint8_t*) "getUserList";
func[0].functionData = NULL;
func[0].function = &getUserList;
*functions = func;
}
void contextFinalizer(FREContext ctx)
{
return;
}
__declspec(dllexport) void initializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
{
*ctxInitializer = &contextInitializer;
*ctxFinalizer = &contextFinalizer;
}
__declspec(dllexport) void finalizer(void* extData)
{
return;
}
}
PS:
头文件:#include "FlashRuntimeExtensions.h" ADOBE提供
资源文件:capicom.dll 微软提供
FlashRuntimeExtensions.lib ADOBE提供
报错如下:
警告 1 warning LNK4001: 未指定对象文件;已使用库 D:\Work\Flex\RTS2015\ANE\AneCA\AneCA\LINK AneCA
错误 2 error LNK2001: 无法解析的外部符号 __DllMainCRTStartup@12 D:\Work\Flex\RTS2015\ANE\AneCA\AneCA\LINK AneCA
错误 3 error MSB6006: “link.exe”已退出,代码为 1120。 C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets 607 5 AneCA
错误 3 error MSB6006: “link.exe”已退出,代码为 1120。 C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets 607 5 AneCA
错误 4 error LNK1120: 1 个无法解析的外部命令 D:\Work\Flex\RTS2015\ANE\AneCA\Release\AneCA.dll AneCA
微软还提供一个capicom的SDK,我下了 但是不知道该怎么用
安装微软的 CAPICOM SDK后 lib文件夹里有capicom.pdb和capicom.dll 两个文件,不知PDB文件是干嘛的
请问,我该怎么调用这个DLL