呼叫C++;使用dllImport在C#net中创建Dll
请查找以下示例呼叫C++;使用dllImport在C#net中创建Dll,c#,c++,pinvoke,call,dllimport,C#,C++,Pinvoke,Call,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); [DllI
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);
此方法将用于启动实时捕获
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);
<>我不能访问实际的类dSuLLI:::抓取器,如第二语句C++函数中提到的。< /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;
}
但是,请考虑对您的问题的评论。如果你可以使用你所感兴趣的现成的包装器,你应该这样做:)< P>有很多尝试使C/C++ +互操作更容易,但是到目前为止,来自微软的管理C++可能是最好的(虽然它不是C++标准的一部分)。 另一个有希望的选择是Mono的CXXI 它提供了一种符合标准的方法
它还需要一些黑客攻击(谷歌代码2012的夏天),但它最终应该支持Visual C++和Windows。你可以通过PInvoke直接从C++的C代码中实例化和访问C++类对象,但是它非常复杂,涉及大量的工作,请阅读并阅读C++ PlkIk互操作SDK所能做的。
(这是一个商业软件,我是作者)我想这就是你想要的:这不会有好的结局。您可以使用DirectShow.NET包装器修补DirectShow。在谷歌查询中输入,点击第二次。非常感谢您提供的信息。我会给你一个尝试和更新进一步。