注册 登录
编程论坛 VC++/MFC

在 C++ 中调用 DLL,然后生产 DLL 遇到问题,求提示

mocheng2 发布于 2014-06-09 10:09, 1277 次点击
本人不是做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
0 回复
1