开发者

DLLImport error: System.AccessViolationException with Manifest file and c#

开发者 https://www.devze.com 2022-12-24 05:01 出处:网络
When trying to call (DLLImport) an external c++ dll from a .net application that has a manifest file with requireAdministrator, I get this error trying to call function from the C++ dll in Windows 7 w

When trying to call (DLLImport) an external c++ dll from a .net application that has a manifest file with requireAdministrator, I get this error trying to call function from the C++ dll in Windows 7 with UAC enabled.

Method I am calling: EnCrypts

Exception:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Code:

public class BlowFish
{
    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)]
    public static extern String EnCrypt(String strData, String strPassword);

    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)]
    public static extern String EnCrypt(String strData, String strPassword, bool doNotUsePassChecking);

    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)]
    public stati开发者_运维问答c extern String DeCrypt(String strData, String strPassword, bool doNotUsePassChecking);

    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)]
    public static extern String DeCrypt(String strData, String strPassword);


    public static String EnCrypts(String strData, String strPassword)
    {
        return EnCrypt(strData, strPassword, true);
    }
}


It occurs because - String at creation allocates memory for 4 elements. If the size of the returned parameter is more 4 that there is a mistake.

It is necessary to use IntPtr and Marshal.PtrToStringAuto :-)

0

精彩评论

暂无评论...
验证码 换一张
取 消