首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C#到C++非托管代码的多个函数调用会导致AccessViolationException

从C#到C++非托管代码的多个函数调用会导致AccessViolationException
EN

Stack Overflow用户
提问于 2012-01-05 04:29:20
回答 2查看 1.6K关注 0票数 6

我在C#程序中声明了一个DLL导入,如下所示:

代码语言:javascript
复制
[DllImport("C:\\c_keycode.dll", EntryPoint = "generateKeyCode", 
           CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr generateKeyCode(char[] serial, char[] option, char c_type);

它引用了我的DLL中的函数generateKeyCode()

下面是导致错误的代码(使用的断点):

代码语言:javascript
复制
const char* generateKeyCode(char serial[], 
                 char option[], 
                 char c_type)
{
returnBufferString = "";
SHA1_CTX context;
int optionLength = 0;
#ifdef WIN32
unsigned char buffer[16384] = {0};
#else
unsigned char buffer[256] = {0}; 

#endif
//char output[80];
char keycode[OPTION_KEY_LENGTH+1]        = "";
int digest_array_size = 10; //default value for digest array size
unsigned char digest[20] = {0};
char optx[24] = {0};
char c_type_upper;
// Combine serial # and Option or Version number

char str1[30] = {0};
int i;
int size = 0;
int pos = 0;


...
...
}

基本上,我导入了这个DLL,这样我就可以传递函数参数,它可以执行它的算法,并简单地返回结果。我使用了这个封送拆分器函数...

代码语言:javascript
复制
public static string genKeyCode_marshal(string serial, string option, char type)
{
    return Marshal.PtrToStringAnsi(generateKeyCode(serial.ToCharArray(), 
           option.ToCharArray(), type));
}

...so我可以正确地拨打电话。在我的C++头文件中,我定义了一个字符串,这在回答这个question时很有用(它是位于C/C++函数顶部的returnBufferString变量)。

我多次调用这个函数,因为我使用NumericUpDown控件以0.1为增量从1.0到9.9 (每次向上或向下都伴随着另一个函数调用),然后再次向下。然而,每次我尝试这样做时,程序在似乎设置了一定数量的函数调用后就会挂起(如果我只是上下直走,在返回的过程中会在1.9处停止,或者如果我上下交替一点,程序会在更早的时候停止)。

请注意,它可以工作并给出我想要的值,没有任何差异。

我将缓冲区大小更改为某个较小的数字(5012),当我试图运行该程序时,在第一次函数调用时,它抛出了AccessViolationException。然而,将缓冲区大小加倍到原来的两倍(32768)与原始相比没有任何影响--从1.0直接上升到9.9,然后再下降,它停止在1.9并抛出异常。

编辑:默认为ANSI,因此为ANSI。这没什么问题。这是一个内存分配问题吗??

EN

Stack Overflow用户

回答已采纳

发布于 2012-01-08 14:50:14

我知道这可能不能令人满意,但是一旦我从C/C++ DLL中删除了用于调试的输出重定向,问题就解决了。现在一切都正常了,所以我猜这基本上等同于回答了我自己的问题。感谢大家的回复。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8733557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档