1992年到1993年的时间框架对于C++来说是至关重要的.
在'92/'93时间框架中,我研究了Aldus PageMaker的插件架构,该架构采用C++编码.PageMaker建立在一个名为VAMP的C++ OOP框架上,它支持Mac OS和Windows之间的可移植性.
所以我们尝试使用C++的特性来构建插件架构.由于所谓的脆弱基类问题,这证明对于C++类来说是非常有问题的.
我接着写了一篇发表在期刊上的论文,并在OOPSLA '93的反思研讨会上发表了论文.您可以阅读我在此处介绍的论文的pdf格式:
时间不变虚拟成员函数调度C++ Evolvable类 (页面底部,单击查看或下载)
我还在波特兰的Usenix会议上与Bjarne Stroustrup联系,并与他进行了几个月的对话,在那里他主张代表我处理脆弱的基类问题.(唉,当时其他问题被认为更重要 - 例如,试图通过批准来支持RTTI.)
微软此时为Windows平台引入了COM/DCOM系统,该系统被视为该问题的可行解决方案.通过用于定义COM接口的抽象类,C++可以用作COM的实现语言.
然而,这些天开发人员避开COM/DCOM - 尤其是基于COM的ActiveX.(1994年,我继续在微软工作,并在那里使用了C++和COM/DCOM十年.我得出结论,技术组合是一个明确的死胡同.我在这里提到的经验:建立有效的企业分布式软件系统)
与所有这些早期的C++历史相反,Steve Job的公司NeXT在90年代早期使用Objective C设计了一个插件架构,这是NeXT Step框架的组成部分.如今,苹果计算机和重要平台(如iPhone)上的Mac OS X中充满活力.
我提交的Objective C能够以出色的方式解决插件问题.
Java的拥护者将引用垃圾收集等因素来说明为什么它比C++更有效率.我不会对此提出异议,但是Objective C直到最近才用2.0进行垃圾收集.在iPhone上垃圾收集仍然无法使用.尽管如此,OS X插件架构完全可行 - 完全取决于Objective C风格的OOP与C++ OOP的优点.
有趣的是,Java已被用于构建适用于任何平台或软件开发社区的最普遍的插件架构.Eclipse IDE插件体系结构现在几乎已经成为传奇,就像这样的体系结构一样,几年前整合了Equinox OSGi模块管理层.J2EE应用服务器已经支持EJB 的插件架构十年了.目前,所有注意到的J2EE应用服务器都已合并OSGi来管理运行时可绑定模块.Spring Framework及其Spring Bean的运行时可绑定单元已经发展到超过J2EE - 主要是因为它的系统强大,可以管理Spring Bean中的绑定.
Java社区仍在努力定义官方模块管理标准,尽管事实如此,Java平台支持的软件架构比任何其他编程平台更普遍地包含插件功能.
尽管Java作为一种相对于C#的语言存在弱点,并且.NET已经在其.NET程序集标准中具有更强大的模块实现,但Java在广泛使用的日常软件系统方面仍然领先一步,其中包含某种形式的插件建筑.奇怪的是,Java社区甚至没有意识到这是他们作为企业开发平台持续成功的基础.
我个人认为C++的脆弱基类问题是最致命的缺陷.
自从这个问题突显给C++社区以及C++的创建者以来已经过去17年了,现在解决这个问题已经太晚了吗?
具体来说,我只需要几小时:分钟但是说我有一个.NET TimeSpan对象,我应该如何将它存储在SQL(CE)数据库中?
我最近开始创建一个图像编辑工具,以满足非常具体的需求.对于那些打算使用它的人来说,这同样适合我自己的娱乐.然而,我在早期遇到了一些建筑障碍.
与任何图像编辑器一样,用户将使用"工具"来绘制和操纵图像.我的第一次尝试包括一个简单的界面:
public interface IDrawingTool
{
void DrawEffect( Graphics g );
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
这(我认为)会很好,干净,便于维护和扩展.只需添加接口对象并在运行时调用所选接口对象的DrawEffect方法即可.
这种方法的问题在于不同的绘图工具不能干净地粘附到单个界面上.例如,钢笔工具只需知道要绘制的点即可工作.然而,矩形需要点击第一个点,以及当前位置.多边形工具需要跟踪多次鼠标点击.
我无法想出一个实现这个的好方法.我现在能想到的最好的方法是涉及每个工具的switch语句和case,这意味着绘图逻辑将在Canvas类中,而不是由Tool类型对象封装.因为这是练习,我想以正确的方式做到这一点.在此先感谢您的帮助.
我有一个350,000行的csv文件,每行有大约150列.
使用ADO.Net将这些行插入SQL Server的最佳方法是什么?
我通常这样做的方法是手动创建SQL语句.我想知道是否有任何方法可以将其编码为简单地将整个数据表插入SQL Server?或者像这样的捷径.
顺便说一句,我已经尝试过用SSIS做这个,但是我可以使用C#处理一些数据清理问题,但SSIS并不那么容易.数据以XML格式开头,但为了简单起见,我将其更改为CSV格式.
我正在开发一个简单的下载应用程序.在请求以下文件时,firefox和我的应用程序都没有获取content-length字段.但是如果我使用wget服务器发出请求会发送内容长度字段.我确实更改了wgets用户代理字符串以进行测试,它仍然获得了content-length字段.
任何想法为什么会这样?
wget请求
---request begin---
GET /dc-13/video/2005_Defcon_V2-P_Zimmerman-Unveiling_My_Next_Big_Project.mp4 HTTP/1.0
User-Agent: test
Accept: */*
Host: media.defcon.org
Connection: Keep-Alive
---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.0 200 OK
Server: lighttpd
Date: Sun, 05 Apr 2009 04:40:08 GMT
Last-Modified: Tue, 23 May 2006 22:18:19 GMT
Content-Type: video/mp4
Content-Length: 104223909
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
firefox请求
GET /dc-13/video/2005_Defcon_V2-P_Zimmerman-Unveiling_My_Next_Big_Project.mp4 HTTP/1.1
Host: media.defcon.org
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: …Run Code Online (Sandbox Code Playgroud) 我想在 .NET (C#) 中为 Adobe 产品(特别是 Acrobat Reader 和 PhotoShop)编写插件。要求是在“文件”菜单中添加一个新命令。例如,在 Acrobat Reader 中,我需要添加一个新的“文件 >> 打开我的文件”命令,该命令显示打开某个文件的对话框。
我听说过 Adobe 开发套件。Visual Studio 中是否有可以创建插件的项目类型或向导?
有没有让基类在C#中使用派生类的静态变量?像这样的东西:
class Program
{
static void Main(string[] args)
{
int Result = DerivedClass.DoubleNumber();
Console.WriteLine(Result.ToString()); // Returns 0
}
}
class BaseClass
{
public static int MyNumber;
public static int DoubleNumber()
{
return (MyNumber*2);
}
}
class DerivedClass : BaseClass
{
public new static int MyNumber = 5;
}
Run Code Online (Sandbox Code Playgroud)
我试图让它返回10,但我得到0.
这里是我使用它的地方:我有一个名为ProfilePictures的类,它带有一个名为GetTempSavePath的静态函数,它将用户id作为参数,并返回临时文件的物理路径.路径库是一个名为TempPath的静态变量.由于我在多个项目中使用此类并且它们具有不同的TempPath,因此我创建了一个派生类,该变量将该变量设置为项目的路径.
需要有关如何使用PHP内置的XML-RPC库(版本为PHP V5.2.6)的XML-RPC客户端的教程或一些说明.服务器是用Python工作的.
谷歌和php.net都让我失望了.
根据phpinfo我安装了xmlrpc-epi v.5.01 .我访问了http://xmlrpc-epi.sourceforge.net/,但左边的xmlrpc-epi-php示例部分向我展示了sf.net的404版本.
我将使用http://phpxmlrpc.sourceforge.net/,希望这对我有用.
http://phpxmlrpc.sourceforge.net/上的代码很简单,我开始工作了.
没有关闭这个问题.如果有人想要使用超简单的解决方案,那就太棒了!
我有一个工作NotifyIcon和ContextMenuStrip,我不想用默认的菜单的外观和使用感觉被运出与此控制这是不同的Windows(Vista的在我的情况)箱子contextMenu.RenderMode = ToolStripRenderMode.ManagerRenderMode或contextMenu.RenderMode = ToolStripRenderMode.Professional:

我不希望这个使用contextMenu.RenderMode = ToolStripRenderMode.System:

我只是想使用标准的,正常的Windows"外观和感觉",如无数,可能是非网络应用程序*grumble*:

任何想法的人如何实现这一目标?
你好,我有一个网站,当用户点击一个按钮和页面回发时,如果用户刷新页面或点击F5,则再次调用按钮方法.
任何人都知道一些方法来阻止页面刷新而不将页面重定向到同一页面?
if(page.isRefresh)之类的东西......或者如果存在任何javascript解决方案更好.
这看起来有效......但是当我刷新它不会回发但在文本框中显示之前的值
http://www.dotnetspider.com/resources/4040-IsPageRefresh-ASP-NET.aspx
private Boolean IsPageRefresh = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["postids"] = System.Guid.NewGuid().ToString();
Session["postid"] = ViewState["postids"].ToString();
TextBox1.Text = "Hi";
}
else
{
if (ViewState["postids"].ToString() != Session["postid"].ToString())
{
IsPageRefresh = true;
}
Session["postid"] = System.Guid.NewGuid().ToString();
ViewState["postids"] = Session["postid"];
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!IsPageRefresh) // check that page is not refreshed by browser.
{
TextBox2.Text = TextBox1.Text + "@";
} …Run Code Online (Sandbox Code Playgroud)