| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1273 人关注过本帖
标题:在 C++ 中调用 DLL,然后生产 DLL 遇到问题,求提示
只看楼主 加入收藏
mocheng2
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-6-9
收藏
 问题点数:0 回复次数:0 
在 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
搜索更多相关主题的帖子: 百度搜索 include 微软 开发 如何 
2014-06-09 10:09
快速回复:在 C++ 中调用 DLL,然后生产 DLL 遇到问题,求提示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016225 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved