Проблема BitScanForward64 в Visual Studio 11 Developer Preview. - PullRequest
0 голосов
/ 25 декабря 2011

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

Затем меня осенило, что 64-битная версия может быть доступна только для конкретной 64-битной DLL (я предполагаю «Общие» в мастере нового проекта)и что мне может понадобиться отдельный 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 Ответ

2 голосов
/ 25 декабря 2011

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

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

...