Проблема с BitScanForward64 в Visual Studio 11 Developer Preview

Я совершенно не новичок в написании чего-либо в C. Я пишу вспомогательную DLL (для вызова из С#), которая выполняет двоичную манипуляцию. Я получаю "идентификатор" BitScanForward64 "это ошибка undefined". Доступна 32-разрядная версия. Я считаю, это потому, что я создал Win32 DLL.

Тогда мне стало ясно, что 64-разрядная версия может быть доступна только для конкретной 64-битной DLL (я предполагаю "General" в новом мастере проекта), и мне может понадобиться отдельная 32-битная и 64-разрядная dll. В этом случае, или я могу иметь одну DLL, которая запускает как свойства BitScanForward, так и BitScanForward64, и если да, то как мне ее создать?

Вот мой текущий код:

// C Functions.cpp : Defines the exported functions for the DLL application.
#include "stdafx.h"
//#include <intrin.h>
//#include <winnt.h>
int _stdcall LSB_i32(unsigned __int32 x)
{
 DWORD result;
 BitScanForward(&result, x);
 return (int)result;
}
int _stdcall MSB_i32(unsigned __int32 x)
{
 DWORD result;
 BitScanReverse(&result, x);
 return (int)result; 
}
int _stdcall LSB_i64(unsigned __int64 x)
{
 DWORD result;
 BitScanForward64(&result, x);
 return (int)result;
}
int _stdcall MSB_i64(unsigned __int64 x)
{
 DWORD result;
 BitScanReverse64(&result, x);
 return (int)result;
}
</winnt.h></intrin.h>
1 ответ

Можно создать DLL для хранения обеих этих операций, но тогда это будет только DLL x64 (и, следовательно, она будет использоваться только в 64-разрядной ОС в 64-разрядном процессе), как показано в таблице здесь (также обратите внимание, что intrisics имеют префикс _ с ними, функции BitScan*64 могут потребовать этого, все они работают с ним независимо).

Эта ссылка описывает создание проекта на основе x64 в Visual Studio, из которого вы сможете создать свою DLL.

licensed under cc by-sa 3.0 with attribution.