具有C#的C DLL-从DLL返回数据的问题

问题描述

我有一个win32 C dll。我需要在C#代码中调用此dll的功能。我正在用C写一个包装dll。在包装dll中,我调用原始win32 dll的函数,然后在C#代码中调用包装dll的函数。 包装器dll的功能签名如下:

外部“ C” __ declspec(dllexport)int TDESEncrypt_with_Provided_Key(未签名的字符 Enc_Mode,未签名的字符 FileName,未签名的字符* HSMPIN, unsigned char * Key,int Key_Length,unsigned char * Clear_Data, int Clear_Data_Length,unsigned char * Encrypted_Data,int Encrypted_Data_Length,int slotId);

此函数获取Clear_Data,对其进行加密,然后将加密的数据复制到Encrypated_Data参数中。

我正在C#代码中导入此函数,如下所示:

[DllImport(@“”,CallingConvention = CallingConvention.Cdecl)] 私有静态外部int TDESEncrypt_with_Provided_Key(字节[]加密模式,字节[]文件名,字节[] HSM_PIN,字节[]密钥名, int keyname_length,byte [] Enctypred_Data,ref long Encrypted_Data_Length, byte [] Clear_Data,长Clear_Data_Length,int Slod_ID);

我正在按如下方式调用此包装dll函数:

        long data_size_enc = 0;
        int Slot = 0;
        byte[] LogFileName;
        string Enc_Text = "";
        byte[] Key_bytes = new byte[8];
        byte[] enc_data_bytes = new byte[8];
        byte[] clear_bytes = new byte[8];
        byte[] encryption_mode = new byte[3];
        byte[] HSM_PIN = new byte[4];

        Key_bytes = Utility.ToByteArray(key,System.Globalization.NumberStyles.HexNumber);
        byte[] clear_data_bytes = Utility.ToByteArray(data.ToString(),System.Globalization.NumberStyles.HexNumber);
        enc_data_bytes = Utility.ToByteArray("0000000000000000",System.Globalization.NumberStyles.HexNumber);
        encryption_mode = Utility.ToByteArray("ECB",System.Globalization.NumberStyles.None);
        HSM_PIN = Utility.ToByteArray(<pin>,System.Globalization.NumberStyles.None);

        LogFileName = Encoding.ASCII.GetBytes(<log file name>);

int结果= TDESEncrypt_with_Provided_Key(encryption_mode,LogFileName,HSM_PIN,Key_bytes,Key_bytes.Length,enc_data_bytes, ref data_size_enc,clear_data_bytes,clear_data_bytes.Length,HSM_Slot);

            Enc_Text = Utility.ToByteString(enc_data_bytes);

除了一个非常奇怪的问题之外,一切都工作正常。当我第一次调用该函数时,会得到正确的结果。但是,当我再次调用该函数而不重新启动程序时,包装器dll的enc_data_bytes没有任何显示。

如果我通过附加C#exe调试dll,则可以看到dll将正确的数据放入Encrypted_Data中,但是由于某些原因,第二次调用该函数时C#代码无法获取此数据。 / p>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)