C++函數定義﹕int SetWindowAction(ProMdlType mdlType,char* mdlName)
{
ProError status;
ProMdl *mdlArray;
wchar_t **names;
int mdlCount;
int activeIndex = -1;
char* name; name = (char*)malloc(sizeof(char *));
status = ProSessionMdlList(mdlType,&mdlArray,&mdlCount); status = ProArrayAlloc(mdlCount, sizeof(wchar_t *),1,(ProArray*)&names);
for (int i = 0 ; i < mdlCount; i ++)
{
names[i] = (wchar_t *)calloc(PRO_NAME_SIZE, sizeof(wchar_t)); status = ProMdlNameGet(mdlArray[i],names[i]); ProWstringToString(name,names[i]); if ((*mdlName) == (*name))
{
activeIndex = i;
break;
}
} ProMdl mdl;
int windowId;
if (activeIndex != -1)
{
mdl = mdlArray[activeIndex];
ProMdlDisplay(mdl);
ProMdlWindowGet(mdl,&windowId);
ProWindowActivate(windowId);
} ProArrayFree((ProArray *)&names); return status;
}C#定義如下﹕
[DllImport("PWF2Operator.dll", EntryPoint = "SetWindowAction", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int SetWindowAction(ProMdlType mdlType, string mdlName); 調用方法如下﹕
public void SetMdlAction(ProMdlType mdlType, string mdlName)
{
SetWindowAction(mdlType, mdlName);
}調用時有時發生"嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀"。
但更多的時候是在關閉C#程序時會發生"Windows已經觸發***.exe的中斷點。可能是因為堆積損毀﹐這也表示***.exe中有錯誤﹐或是其載入的任何DLL中有錯誤。"這是為什么呀?我的感覺好像是內存分配或是釋放上出了問題﹐但我一直只用C#﹐不懂C++﹐兄弟們幫幫我呀﹗
{
ProError status;
ProMdl *mdlArray;
wchar_t **names;
int mdlCount;
int activeIndex = -1;
char* name; name = (char*)malloc(sizeof(char *));
status = ProSessionMdlList(mdlType,&mdlArray,&mdlCount); status = ProArrayAlloc(mdlCount, sizeof(wchar_t *),1,(ProArray*)&names);
for (int i = 0 ; i < mdlCount; i ++)
{
names[i] = (wchar_t *)calloc(PRO_NAME_SIZE, sizeof(wchar_t)); status = ProMdlNameGet(mdlArray[i],names[i]); ProWstringToString(name,names[i]); if ((*mdlName) == (*name))
{
activeIndex = i;
break;
}
} ProMdl mdl;
int windowId;
if (activeIndex != -1)
{
mdl = mdlArray[activeIndex];
ProMdlDisplay(mdl);
ProMdlWindowGet(mdl,&windowId);
ProWindowActivate(windowId);
} ProArrayFree((ProArray *)&names); return status;
}C#定義如下﹕
[DllImport("PWF2Operator.dll", EntryPoint = "SetWindowAction", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int SetWindowAction(ProMdlType mdlType, string mdlName); 調用方法如下﹕
public void SetMdlAction(ProMdlType mdlType, string mdlName)
{
SetWindowAction(mdlType, mdlName);
}調用時有時發生"嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀"。
但更多的時候是在關閉C#程序時會發生"Windows已經觸發***.exe的中斷點。可能是因為堆積損毀﹐這也表示***.exe中有錯誤﹐或是其載入的任何DLL中有錯誤。"這是為什么呀?我的感覺好像是內存分配或是釋放上出了問題﹐但我一直只用C#﹐不懂C++﹐兄弟們幫幫我呀﹗
解决方案 »
- 如何获得ushort类型的高8位和低8位字节 有没有函数实现?
- 字符串替换问题
- Winform中怎样在一个窗体中获得另一个窗体中的控件的值
- 紧急!求救,程序不能运行
- DevExpress的ComboBoxEdit怎么实现类似ComboBox的DisplayMember和ValueMember的功能
- FileUpload限制上传文件类型
- C#?迷茫中.....
- 如何获得Windows Form中的DataGrid控件多行选取后的所有选择行的索引
- 怎么使datagridview可见行填充整个datagridview
- 如何关闭窗口(象MSN Messenger),就是能看见窗口是关向NotifyIcon所在的System tray的位置,而非关向窗口最小化后所在的任务栏
- 再开一贴,十万火急,如何使用正则表达式将指定的html字符文本数据先分离、后替换出来?谢谢。
- 问一个关于参数的弱问题
1、dll所要求的字符串编码,如果是ansi, 最好在c#dll函数申明里加
DllImport( ...... , CharSet=CharSet.Ansi ) ,因为unicode字符是2个字节,而ansi字符是1个字节,如果把unicode传入需要ansi的dll,读写是会发生错误
2、ProSessionMdlList(mdlType,&mdlArray,&mdlCount);
ProArrayFree((ProArray *)&names);
是什么函数,是否有跨线程或跨dll的调用??
ProArrayFree((ProArray *)&names);
它是調用了ProE的Dll﹐你的意思是說問題就出在這里?
=====================================================
这个错误,在我说的第一种情况下会发生但更多的時候是在關閉C#程序時會發生"Windows已經觸發***.exe的中斷點。可能是因為堆積損毀﹐這也表示***.exe中有錯誤﹐或是其載入的任何DLL中有錯誤。"
====================================
这个错误一般出现的第二种情况
http://community.csdn.net/Expert/topic/5072/5072647.xml?temp=.8002436