Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从纯Win32项目(无clr)中使用/clr从Win32.lib项目调用函数_.net_C++_Winapi_Interop_Clr - Fatal编程技术网

.net 从纯Win32项目(无clr)中使用/clr从Win32.lib项目调用函数

.net 从纯Win32项目(无clr)中使用/clr从Win32.lib项目调用函数,.net,c++,winapi,interop,clr,.net,C++,Winapi,Interop,Clr,我想知道如何从ProjectA::ClassA::FuncA()调用一个函数,该函数是一个Win32.lib,带有/clr,来自一个不支持clr且纯Win32项目的ProjectB::ClassB::FuncB()。 这两个项目采用相同的解决方案 首先,这是我尝试过的: 1.使用.lib创建了ProjectA 2.将.lib路径添加到ProjectB属性(在链接器中:输入:Add.Dependencies) 3.我在ProjectB中为ProjectA创建的.lib添加了.h 4.在Projec

我想知道如何从ProjectA::ClassA::FuncA()调用一个函数,该函数是一个Win32.lib,带有/clr,来自一个不支持clr且纯Win32项目的ProjectB::ClassB::FuncB()。 这两个项目采用相同的解决方案

首先,这是我尝试过的: 1.使用.lib创建了ProjectA 2.将.lib路径添加到ProjectB属性(在链接器中:输入:Add.Dependencies) 3.我在ProjectB中为ProjectA创建的.lib添加了.h 4.在ProjectB::ClassB中为ProjectA::ClassA创建了对象,并尝试调用FuncA()

我得到以下错误:

错误1错误LNK2019:未解析的外部符号“public:static void uu cdecl ClassA::FuncA(void)”(?FuncA@ClassA@@函数“public:static void uu cdecl ClassB::FuncB(void)”中引用了SAXXZ)(?FuncB@ClassB@@SAXXZ)Helper.obj

我正在ProjectB中成功使用第三方.lib。我遵循同样的过程,但失败了;ProjectA()的唯一区别在于CLR支持

我错过什么了吗?请开导我;-)


谢谢

本机代码可以调用托管代码,但这需要在使用/clr编译的源代码文件中完成。在ProjectB中,您需要一个本机的小型适配器类(无“ref”)。如果这些是实例方法,则需要在适配器中存储对托管类的引用。

本机代码可以调用托管代码,但这需要在使用/clr编译的源代码文件中完成。在ProjectB中,您需要一个本机的小型适配器类(无“ref”)。如果这些是实例方法,则需要在适配器中存储对托管类的引用。

调用托管程序集时不需要CLR支持。@重新运行:我在ProjectA(.lib)中支持CLR,我在ProjectB中使用它。因此,ProjectA支持CLR,ProjectB不支持。ProjectA仍然是Win32项目,只是我添加了CLR支持。调用托管程序集不需要CLR支持。@重新运行:我在ProjectA(.lib)中支持CLR,我在ProjectB中使用它。因此,ProjectA支持CLR,ProjectB不支持。ProjectA仍然是一个Win32项目,只是我为它添加了CLR支持。谢谢你提供的信息。我能够从ProjectB调用在ProjectA中实现的托管函数-如上所述,两者都是Win32项目。然而,我现在遇到了另一个不寻常(相当平常)的情况(对我来说)。我在ProjectA::ClassA中有静态和非静态函数。我有一个ProjectB::ClassB对象,我想用它调用这些ClassA函数。我可以使用ClassB对象调用ProjectA::ClassA中的非静态/实例方法。但是,我无法使用ClassA::或ClassB::(ClassB:public ClassA是我的子分类方式)的类名调用静态函数。我不熟悉“Win32+CLR”和“Win32”之间的这种互操作。有什么建议吗???我是否明显遗漏了什么?可能静态函数更容易实现。我猜不出你遗漏了什么,你甚至没有包含错误消息。更新您的问题。抱歉,错误是错误LNK2001:未解析的外部符号“public:static void\uu cdecl ClassA::StaticFuncA(void)”(?StaticFuncA@ClassA@@SAXXZ)Helper.objThanks获取信息。我能够从ProjectB调用在ProjectA中实现的托管函数-如上所述,两者都是Win32项目。然而,我现在遇到了另一个不寻常(相当平常)的情况(对我来说)。我在ProjectA::ClassA中有静态和非静态函数。我有一个ProjectB::ClassB对象,我想用它调用这些ClassA函数。我可以使用ClassB对象调用ProjectA::ClassA中的非静态/实例方法。但是,我无法使用ClassA::或ClassB::(ClassB:public ClassA是我的子分类方式)的类名调用静态函数。我不熟悉“Win32+CLR”和“Win32”之间的这种互操作。有什么建议吗???我是否明显遗漏了什么?可能静态函数更容易实现。我猜不出你遗漏了什么,你甚至没有包含错误消息。更新您的问题。抱歉,错误是错误LNK2001:未解析的外部符号“public:static void\uu cdecl ClassA::StaticFuncA(void)”(?StaticFuncA@ClassA@@SAXXZ)Helper.obj