开发者

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

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

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜