相当于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 ofthis
是原始文档中的一个实例吗?)您是否也有SCFStartOutSound
的源代码,这样您就可以知道它希望从OwnerHandle
参数中得到什么属性了,已添加有关类和typedef的信息。LoadIcon()返回一个包含32位数字句柄的图标。因此,您需要从LocaIcon()传递句柄。