kkbaobao 2016-06-16 06:22 采纳率: 0%
浏览 2703

c++/CLR dll调用问题(一个很神奇的问题,望解答)

目前遇到一个很奇怪的问题。
创建控制台程序CLR console application ,添加该dll和lib(工程属性中添加lib目录及名称,dll放到dedug文件夹下),编译通过,完全没有问题
创建windows Forms application,用同样方法添加dll和lib,编译出错,出错地方就是调用的dll函数不成功。
dll代码如下
//h文件

#if !defined(_FTDCTRADERAPI_H)
#define _FTDCTRADERAPI_H

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

#include "ThostFtdcUserApiStruct.h"

#if defined(ISLIB) && defined(WIN32)
#ifdef LIB_TRADER_API_EXPORT
#define TRADER_API_EXPORT __declspec(dllexport)
#else
#define TRADER_API_EXPORT __declspec(dllimport)
#endif
#else
#define TRADER_API_EXPORT
#endif

class TRADER_API_EXPORT CThostFtdcTraderApi
{
public:

static CThostFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = "");
};


控制台程序,成功运行
#include "stdafx.h"

#include ".\ThostTraderApi\ThostFtdcTraderApi.h"
using namespace System;

int main(array ^args)
{
CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi();
return 0;
}

winform程序
// 2.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"
#include ".\ThostTraderApi\ThostFtdcTraderApi.h"
using namespace My2;

[STAThreadAttribute]
int main(array ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

 CThostFtdcTraderApi* aa=CThostFtdcTraderApi::CreateFtdcTraderApi();

// Create the main window and run it
Application::Run(gcnew Form1());
return 0;

}

报错
error LNK2028: unresolved token (0A00000F) "public: static class CThostFtdcTraderApi * __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(char const *)" (?CreateFtdcTraderApi@CThostFtdcTraderApi@@$$FSMPAV1@PBD@Z) referenced in function "int __clrcall main(cli::array^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)我尝试去掉该lib会出现同样的错误,即在winform下调用失败了

产生了两个问题:
1、如何才能在winform下成功调用该lib和dll
2、个人猜想其调用失败是不是h头文件没有说明,即该段
#if !defined(_FTDCTRADERAPI_H)
#define _FTDCTRADERAPI_H

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

#include "ThostFtdcUserApiStruct.h"

#if defined(ISLIB) && defined(WIN32)
#ifdef LIB_TRADER_API_EXPORT
#define TRADER_API_EXPORT __declspec(dllexport)
#else
#define TRADER_API_EXPORT __declspec(dllimport)
#endif
#else
#define TRADER_API_EXPORT
#endif
如何更改?
3、我尝试建立了win32,MFC工程,均能成功编译。这个到底是怎么回事,求高手解答。

  • 写回答

1条回答 默认 最新

  • 普通网友 2016-10-04 07:54
    关注

    到一个很奇怪的问题。
    创建控制台程序CLR console application ,添加该dll和lib(工程属性中添加lib目录及名称,dll放到dedug文件夹下),编译通过,完全没有问题
    创建windows Forms application,用同样方法添加dll和lib,编译出错,出错地方就是调用的dll函数不成功。
    dll代码如下
    //h文件
    #if !defined(_FTDCTRADERAPI_H)
    #define _FTDCTRADERAPI_H
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include "ThostFtdcUserApiStruct.h"
    #if defined(ISLIB) && defined(WIN32)
    #ifdef LIB_TRADER_API_EXPORT
    #define TRADER_API_EXPORT __declspec(dllexport)
    #else
    #define TRADER_API_EXPORT __declspec(dllimport)
    #endif
    #else
    #define TRADER_API_EXPORT
    #endif
    class TRADER_API_EXPORT CThostFtdcTraderA

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况