从void *到DWORD的指针截断

时间:2018-01-13 00:16:50

标签: c++ pointers windows-10 truncate

我正在为项目使用control library用于Visual C ++,如果我在x32版本中构建它,它将非常完美。对于我的项目,我需要它是x64,所以我尝试在Visual Studio中使用x64编译它。但是我收到了一些警告:

Warnings

这是第17行。

    rv = midiInOpen(&handle_, device_idx, (DWORD)(void*)midi_in_proc_static_, (DWORD_PTR)this, CALLBACK_FUNCTION);

如何将其更改为x64版本?我是否必须在Project Proberties中更改某些内容?

2 个答案:

答案 0 :(得分:1)

使用现代的Windows API,您应该使用DWORD_PTR进行此类操作,根据构建设置,它将为32位或64位。如果库指定DWORD并且您无法重建,则可能无法在64位版本中使用它。

答案 1 :(得分:1)

我很确定你做错了。关于const fs = require('fs'); // read/process package.json const file = './package.json'; let pkg = JSON.parse(fs.readFileSync(file).toString()); // at this point you should have access to your ENV vars pkg.proxy = `${process.env.HOST}:${process.env.PORT}`; // the 2 enables pretty-printing and defines the number of spaces to use fs.writeFileSync(pkg, JSON.stringify(file, null, 2)); 功能的Here's the MSDN documentation

它的原型是:

midiInOpen()

因此,将MMRESULT midiInOpen( LPHMIDIIN lphMidiIn, UINT uDeviceID, DWORD_PTR dwCallback, // This is DWORD_PTR not DWORD DWORD_PTR dwCallbackInstance, DWORD dwFlags ); 转换为void*并不是预期的类型是没有意义的。您应该将其直接转换为DWORD