2011-12-24 1 views
0

Я совершенно не новичок в написании чего-либо в C. Я пишу вспомогательную DLL (для вызова из C#), которая выполняет двоичную манипуляцию. Я получаю «идентификатор». Ошибка BitScanForward64 «undefined». Доступна 32-разрядная версия. Я полагаю, что это потому, что я создал DLL Win32.Проблема с BitScanForward64 в Visual Studio 11 Developer Preview

Тогда мне стало ясно, что 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; 
} 
+1

Да, x64 или Itanium, как указано на странице MSDN. –

+0

Итак, нужны две библиотеки DLL. Как создать 64-битную DLL? Кажется, это не вариант. – IamIC

+1

@IanC: http://msdn.microsoft.com/en-us/library/9yb4317s(v=VS.100).aspx – Necrolis

ответ

2

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

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