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

时间:2022-09-01 17:53:31
目前遇到一个很奇怪的问题。
 创建控制台程序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工程,均能成功编译。这个到底是怎么回事,求高手解答。

7 个解决方案

#2


public: static class CThostFtdcTraderApi *  __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(

#3


引用 1 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=error%20LNK2028%3A%20unresolved%20token%20(0A00000F)%20site%3Amicrosoft.com
c++/CLR dll调用问题(一个很神奇的问题,望解答)

不是这个添加dll的问题哟。。

#4


引用 2 楼 Dobzhansky 的回复:
public: static class CThostFtdcTraderApi *  __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(

您的意思是让我改h头文件吗?没明白

#5


该问题目前无法解决,目前只能用控制台入口然后隐藏控制台来做了。。
不知道高手有没有知道的

#7


#pragma managed
#pragma unmanaged

或者针对文件设置 clr 支持性。

#1


#2


public: static class CThostFtdcTraderApi *  __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(

#3


引用 1 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=error%20LNK2028%3A%20unresolved%20token%20(0A00000F)%20site%3Amicrosoft.com
c++/CLR dll调用问题(一个很神奇的问题,望解答)

不是这个添加dll的问题哟。。

#4


引用 2 楼 Dobzhansky 的回复:
public: static class CThostFtdcTraderApi *  __clrcall CThostFtdcTraderApi::CreateFtdcTraderApi(

您的意思是让我改h头文件吗?没明白

#5


该问题目前无法解决,目前只能用控制台入口然后隐藏控制台来做了。。
不知道高手有没有知道的

#6


#7


#pragma managed
#pragma unmanaged

或者针对文件设置 clr 支持性。