我知道几个相似之处..
两者都不能自己执行.它需要一些程序来实例化它.
COM DLL和ActiveX控件是平台独立的.(是这样吗...?)
双方需要支持该接口IUnknown,并公开三个方法QueryInterface,AddRef和Release.
它还需要在使用之后注册,并在完成之后注册.
但他们有什么不同?有人可以列出来吗?
另外我的理解是ActiveX控件是OLE自定义控件(OCX).我听说过像ActiveX DLL这样的术语.它是ActiveX控件的另一种形式还是不同的东西?
通常人们说MFC有点笨拙.它使得UI开发稍微难以维护,因为它有很多自动生成的代码.它具有良好的体系结构(doc/view),但不像Win32编程那样透明,以了解窗口程序如何在后台运行.因此,在这种情况下,扩展MFC编程的曝光或更好地切换到.NET是一件好事,因为可以更轻松地进行维护,从而实现更快的UI设计.
Is it good to continue as MFC developer or good to know .NET as well?
全球公司如何将MFC视为UI开发技术.他们是否愿意支持他们的开发人员继续使用MFC或寻求改变他们的开发技术.
我们一直在我们的程序中使用旧的msado15.dll.我们曾经导入它#import"msado15.dll".现在几天前我们升级到Windows 8.唉,我们的软件停止在没有安装Service Pack 1的Windows 7上运行.早些时候,当我们使用Windows 7时,我们已升级到Service Pack 1,同样的问题发生了,所以我们从所有机器上卸载了Windows 7的Service Pack 1,一切正常.
但是对于Windows 8,我认为他们已经改变了msado15.dll.我在网上进行了一些研究,他们说我们应该用msado60.tlb替换导入,但这对我们的编译破坏也没有用.
这就是我们过去在C++环境中引用的方式
import "c:\program Files\Common Files\system\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF","EndofFile")
Run Code Online (Sandbox Code Playgroud)
我把它改成了
import "c:\program Files\Common Files\system\ado\msado28.tlb" rename_namespace("ADOCG") rename("EOF","EndofFile")
Run Code Online (Sandbox Code Playgroud)
并尝试过
import "c:\program Files\Common Files\system\ado\msado60.tlb" rename_namespace("ADOCG") rename("EOF","EndofFile")
Run Code Online (Sandbox Code Playgroud)
正如Microsoft Link所建议的那样.但它仍然适用于没有安装Service Pack 1的XP机器和Windows 7机器.
任何人都可以建议我们可以遵循的正确步骤,以使我们的程序在没有Service Pack 1的Windows 7上运行,也可以在Windows 8上运行.
几天来一直坚持这个问题.帮助将不胜感激.
问候,Saurabh
这是代码:
int myInt[] ={ 1, 2, 3, 4, 5 };
int *myIntPtr = &myInt[0];
while( *myIntPtr != NULL )
{
cout<<*myIntPtr<<endl;
myIntPtr++;
}
Output: 12345....<junks>..........
Run Code Online (Sandbox Code Playgroud)
对于Character数组:(因为我们最后有一个NULL字符,迭代时没问题)
char myChar[] ={ 'A', 'B', 'C', 'D', 'E', '\0' };
char *myCharPtr = &myChar[0];
while( *myCharPtr != NULL )
{
cout<<*myCharPtr<<endl;
myCharPtr++;
}
Output: ABCDE
Run Code Online (Sandbox Code Playgroud)
我的问题是,因为我们说要添加NULL字符作为字符串的结尾,我们排除了这样的问题!如果是这样的话,规则是在整数数组的末尾添加0,我们可以避免这个问题.说啥?
每个进程都可以使用堆内存来存储和共享进程内的数据.每当我们在堆内存中占用一些空间时,我们就有编程规则,我们需要在作业完成后释放它,否则会导致内存泄漏.
int *pIntPtr = new int;
.
.
.
delete pIntPtr;
Run Code Online (Sandbox Code Playgroud)
我的问题:每个进程的堆内存是多少?
如是,
只有当进程处于运行状态时才可能发生内存泄漏.
如果不,
然后它意味着操作系统能够将数据保留在某个内存中.如果是这样,是否有办法通过另一个进程访问此内存.这也可能成为进程间通信的一种方式.
我想回答我的问题是肯定的.请提供宝贵的反馈意见.
当我们使用Visual Studio(VC8或9)创建DLL时,我们得到一个选项作为创建常规DLL
using MFC as shared DLL
Run Code Online (Sandbox Code Playgroud)
要么
using MFC as static library
Run Code Online (Sandbox Code Playgroud)
他们有什么不同?哪一个是可取的?
一切都很好.
他们使用了什么编程语言(c,c ++,java等)和数据库(oracle,MySQL等)来实现这一目标(因为他们必须快速有效地处理大量数据)?
虽然我不是在寻找他们深入的架构(如果违反了他们的公司政策),但对所有这些事情的概述可能会有用.
有人请你加入宝贵的建议和见解吗?
为了开发Windows程序,我们需要Windows SDK。据我所知,这个 SDK 有助于创建窗口和处理窗口事件等。我想它还使我们能够操作文件和注册表。(线程创建和处理的原因是同一个SDK吗?)
一切都好!
我想知道这个 SDK 包含哪些文件和库。当我安装操作系统或安装 Visual Studio 等编辑器时也会出现这种情况吗?有时我会单独看到 Windows SDK 的链接。它与我安装 Visual Studio 时得到的相同还是有更多内容。
假设我们有一个MyClass类和一个memberfunc().ObjA说,为这个MyClass创建了一个对象.
i.e MyClass ObjA;
Run Code Online (Sandbox Code Playgroud)
ObjA调用memberfunc().
我们可以以编程方式在memberfunc()中获得此名称'ObjA'吗?
注意:我知道如何使用RTTI(运行时类型识别)获取对象的类型,即"MyClass",下面的radman也解释了相同的内容.
编辑:
如果这在c ++中是不可能的,那么在任何其他编程语言中都可以吗?
EDIT2
对这个问题进行了一些修改,因为很少有人无法解释.
检查以下代码
int add(int a, int b)
{
return a + b;
}
void functionptrdemo()
{
typedef int *(funcPtr) (int,int);
funcPtr ptr;
ptr = add; //IS THIS CORRECT?
int p = (*ptr)(2,3);
cout<<"Addition value is "<<p<<endl;
}
Run Code Online (Sandbox Code Playgroud)
在我尝试使用相同的函数签名为函数ptr分配函数的地方,它显示编译错误为错误C2659:'=':函数作为左操作数
通常大多数 MFC(基于窗口的类)是从 CObject 派生的。CObject 有什么作用?为什么某些 MFC 类不需要从 CObject 派生?
假设我有一个对象.我将它分配给一个整数.
MyClass obj1 = 100;//Not valid
Run Code Online (Sandbox Code Playgroud)
比方说,我有一个接受整数的参数化构造函数.
MyClass(int Num)
{
// .. do whatever..
}
MyClass obj1 = 100;//Now, its valid
Run Code Online (Sandbox Code Playgroud)
同样在任何情况下,相反的情况是否有效?!
eg) int Number = obj1;//Is it VALID or can be made valid by some tweeks
Run Code Online (Sandbox Code Playgroud)
编辑:
我发现这可以使用转换函数. 转换函数通常称为"强制转换运算符",因为它们(以及构造函数)是使用强制转换时调用的函数.
转换函数使用以下语法:
operator convert-type-name()
例如,许多人在下面整整地解释了它
这是程序......
class CopyCon
{
public:
char *name;
CopyCon()
{
name = new char;
}
CopyCon(const CopyCon &objCopyCon)
{
name = new char;
_tcscpy(name,objCopyCon.name);
}
~CopyCon()
{
if( name != NULL )
{
delete name;
name = NULL;
}
}
};
int main()
{
CopyCon objCopyCon1;
objCopyCon1.name = "Hai";
CopyCon objCopyCon2(objCopyCon1);
objCopyCon1.name = "Hello";
cout<<objCopyCon2.name<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一旦代码执行完成,当析构函数调用时,它会在'delete'上崩溃说...
计划:......
HEAP CORRUPTION DETECTED:在正常块(#124)之后的0x00366990.CRT检测到应用程序在堆缓冲区结束后写入内存.
(按"重试"调试应用程序)
我们不必在析构函数中清除堆内存.这个程序有什么问题?请帮忙!复制构造函数按预期完美地工作.但还是......!?