C++/CLI 结构体数组使用(.NET技术 VC.NET)
想要使用结构体数组,例如:
value struct pix
{
int x;
int y;
};
然后建立一个该结构体的数组:
array<pix^>^ points=gcnew array<pix^>(10);
现在想要通过一个循环给结构体初始化:
for(int i=0;i<10;i++)
p[i]->x=5; ///这里为何不对呢?应该怎么做才正确?错误提示为:Object reference not
set to an instance of an object.
you need to allocate the elements on the managed heap first.
see http://msdn2.microsoft.com/en-us/library/dtbydz1t.aspx
怎样用tab键把焦点移到子对话框上?(VC/MFC 基础类 )
我建了一个对话框程序,在主对话框上加入了一个子对话框,但是发现tab键只能在主对话框的其他控件之间切换,怎样才能使焦点移到子对话框上啊?
Use DS_CONTROL as a window style for the child dialog
If the you can not tab out from the child dialog, try overriding PreTranslateMessage in your child dialogs and call the parent 's PreTranslateMessage first, return TRUE if it does. Otherwise, return through CDialog::PreTranslateMess
MIDL中如何定义返回BSTR数组的方法(VC/MFC ATL/ActiveX/COM)
为什么这样定义只能返回第一个串,第二个开始都是无效地址。
HRESLUT GetStrings([out]short*psize,[out,size_is(,*psize)]BSTR**ppstrs);
说明一下我把该COM方法代码改写为本地客户端内的函数后,可以正确调用。
You can not pass a array in a short variable. see How To Pass Arrays Between Visual Basic and C
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q207931
AfxBeginThread启动工作线程出现的问题(VC/MFC 进程/线程/DLL )
VC.net 2003提示说:error C2665: “AfxBeginThread” : 2 个重载中没有一个可以转换参数 1(从“UINT (LPVOID)”类型) d:\softwares\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(4105): 可能是“CWinThread *AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
d:\softwares\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(4108): 或 “CWinThread *AfxBeginThread(CRuntimeClass *,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
试图匹配参数列表“(overloaded-function, CClientSocket *, int)”时
我是这么用的:AfxBeginThread(ClientThread,pClientSocket,THREAD_PRIORITY_NORMAL);
其中ClientThread函数原型为UINT ClientThread(LPVOID pParam),pClientSocket为一个指向CSocket类的指针。
不要传递CSocket*,和大多数MFC类一样,这个MFC类不是线程安全的
把socket句柄强制转换成LPARAM类型再传递过去。
void CListeningSocket::OnAccept(int nErrorCode)
{
CSocket::OnAccept(nErrorCode);
CSocket socket;
if (Accept(socket))
{
SOCKET hSocket= socket.Detach();
AfxBeginThread(AcceptConnection, (LPVOID)hSocket);
}
}
UINT AcceptConnection( LPVOID pParam )
{
SOCKET hSocket = (SOCKET)(pParam);
CSocket Socket;
Socket.Attach( hSocket ); // gives resource exception
.
.
.
.
}
如何用javascript调用VC++的函数(VC/MFC 基础类)
有一个网页作为资源放在VC++资源里 用HtmlView可以显示 但是如何使网页里的javascript与C++通信呢?也就是javascript调用C++的函数 注意这个网页是作为资源存在的 而不是写在C++里的
http://blog.csdn.net/jiangsheng/archive/2003/11/09/3795.aspx
http://blog.csdn.net/jiangsheng/archive/2004/06/27/27807.aspx
http://blog.csdn.net/jiangsheng/archive/2004/07/06/35567.aspx
http://blog.csdn.net/jiangsheng/archive/2004/11/07/170742.aspx
动态创建的控件在自己的事件中销毁自己安全吗(Delphi VCL组件开发及应用)
我写了一个不可视控件,内部有个线程(用的是BeginThread,未用TThread),
线程函数的参数就是“Self”:
BeginThread(nil,0,@_WkrThreadProc,Pointer(Self),CREATE_SUSPENDED,dwThreadId);
另外控件有个私有的用AllocateHWnd()建立的隐藏窗口。
使用者调用控件的Start()方法后,Start()内启动线程,线程在工作中,不断用
PostMessage投递自定义的消息到隐藏窗口(线程退出前的最后一个消息是自定义
的WM_THREAD_END),隐藏窗口的窗口过程处理消息并调用事件点火代码触发事件,
WM_THREAD_END消息仅仅就是触发控件的OnEnd(Sender: TObject)事件,没有其他代码。
控件的destructor中先等待线程的结束(如果线程还在运行),清理一些成员,
然后DeallocateHWnd隐藏窗口,
-----------------------------
我的问题是:如果使用者动态创建控件,并在在控件的OnEnd事件里把控件自身销毁,
比如Sender.Free()是安全的吗?
你的 控件的OnEnd事件, 已经是在对应窗口的线程中调用,估计这里问题不大,
关键是你的destructor 中有否正确释放资源
Firing an event is like calling a method or function. So the event
handler is called from the object itself, which is still alive at that
time, and therefore it is potentially dangerous to delete it. It's OK to
delete if you are sure that the method where the event is fired from no
longer refers to any of the member variables (or resources). However, I strongly recommend the following COM IOleObject implementation:
pIOleObject->Close(); //notify the object, so it can close itself gracefully
pIOleObject->Release();//free your reference to the object
MFC编写ActiveX,在属性页中如何得到控件的指针(VC/MFC ATL/ActiveX/COM )
http://support.microsoft.com/kb/205670
如何使用WindowsAPI提供的MD5加密函数(VC/MFC 基础类 )
WinXP, VC7.1
在MSDN中,有几个函数介绍:MD5Init();MD5Update();MD5Final();
Header: Declared in MD5.h.
Library: Included as a resource in CryptDLL.dll
我在程序中#include <MD5.h>
#import <CryptDLL.dll> //加不加都没用
但编译器还是提示找不到那几个函数,请问这是什么原因?