调用C++的Dll使用的DllImport
请找到下面的例子C#.NET调用C++的Dll使用的DllImport
void ExitLibrary(); // C++ function
我能够隐蔽到C#像下面
[DllImport("VisualFOD.dll", CharSet = CharSet.Ansi)]
public static extern void ExitLibrary();
这种方法将被用来启动现场拍摄
bool StartLive(DShowLib::Grabber* f_Grabber, HDC f_hHdc, RECT f_WindowRect);
这种方法将用于启动现场捕捉
[DllImport("TIS_UDSHL09_vc71.dll", CharSet = CharSet.Ansi)]
public static extern bool StartLive(IntPtr f_Grabber, IntPtr f_hHdc, Rectangle f_WindowRect);
我无法访问第二条语句C++函数中提到的实际类DShowLib :: Grabber。
你有任何想法如何申报并获得库类的名字吗?
此DLL不是COM/NET的DLL到包括以C#环境的引用。
如果我正确理解你的问题,你将不能够,如果它驻留在DLL中(并且是由C++头文件访问)直接访问在C#中DShowLib ::抓取类。
两个解决方案可供选择。首先,您可以将本机DLL类封装在C++/CLI类中,以便您可以包含本机C++头文件;其次,你可以编写你自己的DLL,在那里你可以压扁DLL类和P /调用你的扁平方法。
通过展开我的意思是:
class C
{
void M(int i, float j);
}
方法M上被称为像:
__declspec(dllexport) BOOL __stdcall C_M(C * instance, int i, float j)
{
if (instance == nullptr)
return FALSE;
instance->M(i, j);
return TRUE;
}
但是,请考虑您的问题提出的意见。如果您可以使用现成的包装器来制作您感兴趣的库,那么您应该这样做:)
非常感谢您的信息。我会试一试并进一步更新。 – user1315385 2012-04-06 11:02:47
有很多尝试使C#/ C++ interop变得更容易,但是从Microsoft管理的C++可能是最好的(尽管它不是C++标准的一部分)。
另一个有希望的选择是从单声道CXXI,
http://tirania.org/blog/archive/2011/Dec-19.html
它提供了一个符合标准的做法。
它仍然需要一些黑客攻击(2012码,也许谷歌的夏),但它应该终于支持的Visual C++和Windows。
是。您可以通过PInvoke直接从您自己的C#代码实例化和访问C++类对象,但它非常复杂并涉及很多工作,请到这里阅读C++ PInvoke Interop SDK可以执行的操作。
http://www.xinterop.com/index.php/2013/04/13/introduction-to-c-pinvoke-interop-sdk/
(这是一个商业软件,虽然我的作者)
我认为这是你在找什么:HTTP://计算器。com/questions/4741035/how-do-i-dllexport -c-sharp-application-in-a-c-sharp- – Kiril 2012-04-05 14:04:30
这不会很好的结束。你可以使用DirectShow.NET包装来修补DirectShow。在谷歌查询中键入,获得第二次打击。 – 2012-04-05 14:28:35