将函数添加到.h文件后出现C ++ CLR错误

时间:2014-07-24 15:07:21

标签: c# .net c++-cli

我不是C ++程序员,而是代码编辑器"所以我特此诚恳地提前就这个问题道歉。

对于某些广播软件,我正在编辑一个插件,以便在本机C / +和CLR(C#)之间实现互操作。

主机软件:OBS(Open Broadcaster Software) - obsproject.com

插件:CLR主机插件 - github.com/kc5nra/CLRHostPlugin

我想要做的是将函数从OBS暴露给一些CLR库,可以在这里找到可公开函数的总列表:https://github.com/jp9000/OBS/blob/master/OBSApi/APIInterface.h#L198

现在,插件是语言之间的代理,并通过API.h / cpp,https://github.com/kc5nra/CLRHostPlugin/blob/master/CLRHostInterop/API.h公开了上面提到的一些功能。 我想要做的是向API.h添加更多功能,以便将它们公开给CLR库。

当我在API.h第51行添加一个函数时,它会给我链接器错误。

API.h更改

namespace CLROBS 
{

    public ref class API
    {
    public:
        void AddSettingsPane(SettingsPane^ settingsPane);
        void AddImageSourceFactory(ImageSourceFactory^ imageSourceFactory);
        IntPtr API::GetMainWindowHandle();
        void Log(System::String^ format, ...array<System::Object^> ^arguments);
        System::String^ GetPluginDataPath();
        void SetChangedSettings(bool isChanged);
        int GetMaxFPS();
        void StartStopStream(); // Addition to the original.
    };
};

API.cpp更改

#include "OBSApi.h"
#include "API.h"
#include "CLRHostApi.h"
#include "OBSUtils.h"
using namespace System::Runtime::InteropServices;
// Default code......
int API::GetMaxFPS()
{
    return ::API->GetMaxFPS();
}
void API::StartStopStream()
{
    OBSStartStopStream();
}

错误

error LNK2022: metadata operation failed (80131187) : Inconsistent method declarations in duplicated types (types: CLROBS.API; methods: StartStopStream): (0x0600006c). <DIR>\CLRHostPlugin\CLRHostInterop\API.obj  CLRHost.Interop
error LNK2022: metadata operation failed (80131187) : Inconsistent method declarations in duplicated types (types: CLROBS.API; methods: StartStopStream): (0x0600006c). <DIR>\CLRHostPlugin\CLRHostInterop\AbstractPlugin.obj   CLRHost.Interop
error LNK2022: metadata operation failed (801311D6) : Differing number of methods in duplicated types (CLROBS.API): (0x02000008).   <DIR>\CLRHostPlugin\CLRHostInterop\API.obj  CLRHost.Interop
error LNK2022: metadata operation failed (801311D6) : Differing number of methods in duplicated types (CLROBS.API): (0x02000008).   <DIR>\CLRHostPlugin\CLRHostInterop\AbstractPlugin.obj   CLRHost.Interop

使用普通代码时,我眼中的奇怪行为不会发生

namespace CLROBS 
{

    public ref class API
    {
    public:
        void AddSettingsPane(SettingsPane^ settingsPane);
        void AddImageSourceFactory(ImageSourceFactory^ imageSourceFactory);
        IntPtr API::GetMainWindowHandle();
        void Log(System::String^ format, ...array<System::Object^> ^arguments);
        System::String^ GetPluginDataPath();
        void SetChangedSettings(bool isChanged);
        int GetMaxFPS();
        // - commented out - void StartStopStream(); // Addition to the original.
    };
};

修改

添加了API.cpp代码段

即使我注释掉OBSStartStopStream();在API.cpp上,错误仍然存​​在。

/修改

请协助。

此致

MusicDemon

1 个答案:

答案 0 :(得分:0)

问题已取消。现在使用obs-websocket