【发布时间】:2014-07-24 09:22:06
【问题描述】:
我将 .cpp 文件转换为 .dll 文件并在我的 vb.net 项目中使用这个 .dll 文件。在我的 vb.net 项目中访问 c++ dll,我收到此错误,“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”可以在这里得到任何帮助吗? 这是我的 vb.net 代码:
Public NotInheritable Class myTestDLL
<DllImport("encryption.dll", EntryPoint:="conv16to64", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Sub conv16to64(ByVal c As String, ByRef s As String)
End Sub
End Class
这是我的 c++ 函数代码:
extern "C"{
_declspec(dllexport) void conv16to64(char s[], char b[])
{
int i,j;
char t[65],c[65];
for (i=0; i<=16; i++)
c[i] = s[i];
for (i=1; i<=64; i++)
t[i] = 0;
for (i=0; i<=15; i++)
{
if (i == 0)
j = 0;
else if (i == 1)
j = 4;
else if (i == 2)
j = 8;
else if (i == 3)
j = 12;
else if (i == 4)
j = 16;
else if (i == 5)
j = 20;
else if (i == 6)
j = 24;
else if (i == 7)
j = 28;
else if (i == 8)
j = 32;
else if (i == 9)
j = 36;
else if (i == 10)
j = 40;
else if (i == 11)
j = 44;
else if (i == 12)
j = 48;
else if (i == 13)
j = 52;
else if (i == 14)
j = 56;
else if (i == 15)
j = 60;
switch (c[i]) {
case '0': t[j+1] = 0; t[j+2] = 0;
t[j+3] = 0; t[j+4] = 0;
break;
case '1': t[j+1] = 0; t[j+2] = 0;
t[j+3] = 0; t[j+4] = 1;
break;
case '2': t[j+1] = 0; t[j+2] = 0;
t[j+3] = 1; t[j+4] = 0;
break;
case '3': t[j+1] = 0; t[j+2] = 0;
t[j+3] = 1; t[j+4] = 1;
break;
case '4': t[j+1] = 0; t[j+2] = 1;
t[j+3] = 0; t[j+4] = 0;
break;
case '5': t[j+1] = 0; t[j+2] = 1;
t[j+3] = 0; t[j+4] = 1;
break;
case '6': t[j+1] = 0; t[j+2] = 1;
t[j+3] = 1; t[j+4] = 0;
break;
case '7': t[j+1] = 0; t[j+2] = 1;
t[j+3] = 1; t[j+4] = 1;
break;
case '8': t[j+1] = 1; t[j+2] = 0;
t[j+3] = 0; t[j+4] = 0;
break;
case '9': t[j+1] = 1; t[j+2] = 0;
t[j+3] = 0; t[j+4] = 1;
break;
case 'A': t[j+1] = 1; t[j+2] = 0;
t[j+3] = 1; t[j+4] = 0;
break;
case 'B': t[j+1] = 1; t[j+2] = 0;
t[j+3] = 1; t[j+4] = 1;
break;
case 'C': t[j+1] = 1; t[j+2] = 1;
t[j+3] = 0; t[j+4] = 0;
break;
case 'D': t[j+1] = 1; t[j+2] = 1;
t[j+3] = 0; t[j+4] = 1;
break;
case 'E': t[j+1] = 1; t[j+2] = 1;
t[j+3] = 1; t[j+4] = 0;
break;
case 'F': t[j+1] = 1; t[j+2] = 1;
t[j+3] = 1; t[j+4] = 1;
break;
}
}
for (i=1; i<=64; i++)
b[i] = t[i];
}
【问题讨论】:
-
所以这不可能是您没有向我们展示的 C++ 代码中的错误,对吧?
-
另外,这些只是定义,并没有告诉我们任何信息。如何发布您如何调用这些函数,这些字符数组是否有效,DLL 代码是否正确处理这些数组等。
-
不是一个大的 if/else 链,你不能只使用
j = i * 4;吗?