尝试使用crypto ++编译项目时出错C2711

时间:2012-11-06 10:51:13

标签: c++ visual-studio-2008 compilation clr crypto++

我正在尝试使用crypto ++编译项目。我的项目是使用clr,当我尝试编译代码时,我最终得到以下错误:

'main' : this function cannot be compiled as managed, consider using #pragma unmanaged

'int main(cli::array<Type> ^)' : managed type or function cannot be used in an unmanaged function

我的项目正在使用clr,而我正在使用/MD作为运行时库。我在编译crypto ++时设置了相同的参数。

编辑:我的主要功能

     int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");

    // Generate keys
    AutoSeededRandomPool rng;

    InvertibleRSAFunction params;
    params.GenerateRandomWithKeySize( rng, 1536 );

    RSA::PrivateKey privateKey( params );
    RSA::PublicKey publicKey( params );

    std::string plain="RSA Encryption", cipher, recovered;


    // Encryption
    RSAES_OAEP_SHA_Encryptor e( publicKey );

    StringSource( plain, true,
        new PK_EncryptorFilter( rng, e,
            new StringSink( cipher )
        ) // PK_EncryptorFilter
     ); // StringSource

    // Decryption
    RSAES_OAEP_SHA_Decryptor d( privateKey );

    StringSource( cipher, true,
        new PK_DecryptorFilter( rng, d,
            new StringSink( recovered )
        ) // PK_DecryptorFilter
     ); // StringSource

    assert( plain == recovered );
    std::cin.ignore();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

如果您尝试在托管代码中执行任何非托管指令,则会出现此错误。请参阅here

assert()std::string之类的内容分别是本机方法/类型,这意味着它们处理原始指针并且不遵守托管C ++的规则。可以使用PInvoke/DllImport来实现将这样的非托管代码与托管代码混合。