我有一個用C++編寫的DLL,然後在C#程序中使用。 C#程序引用了DLL,我調用這些類並可以使用DLL中定義的函數。關於在C#中使用C++ DLL函數的問題#
現在我想添加其他功能到DLL,所以我可以在C#中運行C++代碼。我按照如何定義DLL中的其他函數的例子; .h和.cpp,我創建一個執行代碼的新函數。我把它放在與之前定義的函數相同的地方,但是當我把DLL放在我的C#代碼中時,我的函數不在那裏。當我創建一個DLL類的實例時,我的函數不是它的一部分。
我把它放在.h中作爲類的公共函數,並賦予它在.cpp中運行但未找到的代碼。
爲什麼我的C#程序看不到我製作的功能,即使它跟隨其他功能一樣的套件?
UPDATE
code.h:
#pragma once
#include <windows.h>
#include <PvDisplayWnd.h>
#include <vfw.h>
#include "NPvResult.h"
#include "NPvDeviceInfo.h"
#include "NPvBuffer.h"
#include <string>
using namespace System;
using namespace System::Runtime::InteropServices;
public ref class NPvDisplayWnd
{
public :
NPvDisplayWnd();
bool Handle();
NPvResult^ ShowModeless(long locx, long locy, long x, long y);
NPvResult^ ShowModal();
NPvResult^ NPvDisplayWnd::Create();
int^ Display(NPvBuffer^ aBuffer, int^ x);
NPvResult^ Work(const std::string afilename, unsigned short asizex, unsigned short asizey, unsigned short aBPP, double aFPS);
NPvResult^ Close();
NPvResult^ DoEvents();
}
code.cpp:
#include "NPvDisplayWnd.h"
NPvDisplayWnd::NPvDisplayWnd(){code}
NPvResult^ NPvDisplayWnd::Create(){code}
bool NPvDisplayWnd::Handle()
NPvResult^ NPvDisplayWnd::ShowModeless(long locx, long locy, long x, long y){code}
NPvResult^ NPvDisplayWnd::ShowModal(){code}
int^ NPvDisplayWnd::Display(NPvBuffer^ aBuffer, int^ x){code}
NPvResult^ NPvDisplayWnd::DoEvents(){code}
NPvResult^ NPvDisplayWnd::Work(const std::string aFileName, unsigned short aSizeX, unsigned short aSizeY, unsigned short aBPP, double aFPS){code}
NPvResult^ NPvDisplayWnd::Close(){code}
我添加爲工作()函數的函數。如果我構建它並將其放置在我的C#代碼中,它會看到除工作以外的所有功能。爲了確保我使用的是正確的.dll,我將ShowModeless()的名稱更改爲ShowModeless__F()並重建它,並將其添加到我的C#中,並且更改結束,但我仍然沒有看到我的Work()函數。
你有鏈接到你工作的例子嗎? – MusiGenesis
這根本不是C++的dll;這是C++/CLI,它是與C++不同的語言(雖然類似)。 –