Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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
相当于C++&引用;这";C中的指针# 我试图把一个成功的C++程序翻译成C语言,而我现在则被困在初始化音频输出设备上。我想知道C#中“this”指针的等价物 下面是工作C++代码: DWORD WINAPI SCFStartOutSound(SCFHANDLE sohOwnerHandle, SCFHANDLE *pscfHandle, SCFEventOutSoundCallback lpfnEventCallback, BSTR FileName); CCComBSTR FileName = "Out_DxSpeaker.dll"; HANDLE OutSoundHandle = NULL; SCFStartOutSound(this, &OutSoundHandle, OnSCFEventOutSoundCallback, FileName);_C#_C++_Pointers_This - Fatal编程技术网

相当于C++&引用;这";C中的指针# 我试图把一个成功的C++程序翻译成C语言,而我现在则被困在初始化音频输出设备上。我想知道C#中“this”指针的等价物 下面是工作C++代码: DWORD WINAPI SCFStartOutSound(SCFHANDLE sohOwnerHandle, SCFHANDLE *pscfHandle, SCFEventOutSoundCallback lpfnEventCallback, BSTR FileName); CCComBSTR FileName = "Out_DxSpeaker.dll"; HANDLE OutSoundHandle = NULL; SCFStartOutSound(this, &OutSoundHandle, OnSCFEventOutSoundCallback, FileName);

相当于C++&引用;这";C中的指针# 我试图把一个成功的C++程序翻译成C语言,而我现在则被困在初始化音频输出设备上。我想知道C#中“this”指针的等价物 下面是工作C++代码: DWORD WINAPI SCFStartOutSound(SCFHANDLE sohOwnerHandle, SCFHANDLE *pscfHandle, SCFEventOutSoundCallback lpfnEventCallback, BSTR FileName); CCComBSTR FileName = "Out_DxSpeaker.dll"; HANDLE OutSoundHandle = NULL; SCFStartOutSound(this, &OutSoundHandle, OnSCFEventOutSoundCallback, FileName);,c#,c++,pointers,this,C#,C++,Pointers,This,类别: CTestAppDlg::CTestAppDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestAppDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } 类型定义: typedef HANDLE SCFHANDLE; 结果:音频输出设备已正确初始化 下面是我的C#翻译代码: [DllImport(DllFileName.dll)] unsafe

类别:

CTestAppDlg::CTestAppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestAppDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}
类型定义:

typedef HANDLE SCFHANDLE;
结果:音频输出设备已正确初始化

下面是我的C#翻译代码:

[DllImport(DllFileName.dll)]
unsafe public static extern uint SCFStartOutSound(IntPtr OwnerHandle,IntPtr* soundoutHandle, SCFEventOutSoundCallback EventCallback, [MarshalAs(UnmanagedType.BStr)] string fileName);

  unsafe
    {
        IntPtr soundOutPtr;
        uint res = SCFStartOutSound(this.Handle, &soundOutPtr, onSoundOutEventCallback,"Out_DxSpeaker.dll");
        MessageBox.Show(res.ToString());
    }
此代码导致System.AccessViolationException异常


<>我知道C++中的这个是一个指针,它保存当前对象的内存地址,而C中的“这个”是指当前的类实例。< /P>有些项目需要编译编译中不安全的代码。SunSab己代码已经启用了。(typedef of
SCFHANDLE
,class declaration of
this
是原始文档中的一个实例吗?)您是否也有
SCFStartOutSound
的源代码,这样您就可以知道它希望从
OwnerHandle
参数中得到什么属性了,已添加有关类和typedef的信息。LoadIcon()返回一个包含32位数字句柄的图标。因此,您需要从LocaIcon()传递句柄。