Tag: c ++

如何使用SWIG生成的接口在C#中正确转发?

我有一个非常庞大和成熟的C ++代码库,我正在尝试使用SWIG生成一个C#接口。 我无法改变实际的C ++代码本身,但我们可以使用SWIG提供的任何方式来扩展/更新它。 我面临的问题是,如下所示编写的C ++函数会导致C#出现问题。 A* SomeClass::next(A*) 调用者可能会执行以下操作: A* acurr = 0; while( (acurr = sc->next(acurr)) != 0 ){ if( acurr isoftype B ){ B* b = (B*)a; …do some stuff with b.. } elseif( acurr isoftype C ) … } 本质上,迭代一个元素容器,根据它们的真实类型,做一些不同的事情。 SWIG为“next”函数生成了C#层,遗憾的是执行了以下操作: return new A(); 因此,C#中的调用代码无法确定返回的对象是否实际上是派生类,它实际上似乎总是基类(这确实有意义)。 我遇到过几种解决方案: 使用%extend SWIG关键字在对象上添加方法,最终调用dynamic_cast。 正如我所看到的,这种方法的缺点是,这需要您了解inheritance层次结构。 在我的情况下它是相当巨大的,我认为这是一个维护问题。 使用%factory关键字提供方法和派生类型,并让SWIG自动生成dynamic_cast代码。 这似乎是第一个更好的解决方案,但是从更深层次的角度来看,它仍然需要您搜索所有方法以及它可能返回的所有可能的派生类型。 […]

“语音泡沫”通知

我正在尝试通知在MFC应用程序中弹出类似这些气泡的内容: 大写锁定图像http://www.humanized.com/weblog/images/caps_lock_indication.png 我目前正在C#中创建一个接口模型来展示一些利益相关者,所以在那里也很好。 它不一定是语音泡沫式的:它可能类似于工具提示 – 但它必须在没有鼠标hover的情况下出现 干杯!

Windows服务运行但在两天后停止处理

我看过很多关于这个问题的post但不符合我的标准。 话虽如此,这是我构建的第一个“需要”来执行大量逻辑的。 所有这些都可以工作几天,但在此之后逻辑停止工作,没有登录事件查看器,也没有发送电子邮件(例外)。 我想知道我的逻辑是不正确的……寻找建议和指针。 public partial class QuayService : ServiceBase { private System.Timers.Timer m_mainTimer; private bool m_timerTaskSuccess; private Email _email; public QuayService() { InitializeComponent(); _email = new Email(); } protected override void OnStart(string[] args) { try { // Create and start a timer. m_mainTimer = new System.Timers.Timer(); m_mainTimer.Interval = 5000; // every 5 seconds m_mainTimer.Elapsed […]

在c#中将文件保存到应用程序数据

我使用以下方法将文件保存到c#中的文件夹Application Data string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 它在Windows XP中运行良好,但我找不到这样的文件夹路径我Windows Vista。 此文件夹位于Vista中的哪个位置,如何将文件保存到此文件夹

C#:function评估顺序(vs C)

请使用以下C代码( K&R第77页 ): push(pop() – pop()); /* WRONG */ 这本书说,因为-和/不是可交换的运算符,所以评估2个pop函数的顺序是必要的(显然,为了获得正确的结果)……因此你必须将第一个函数的结果放入先变量,然后继续算术,如下: op2 = pop(); push(op2 – pop()); 显然这是因为编译器无法保证评估函数的顺序(…为什么?) 我的问题是,C#做同样的事吗? 在使用C#时,我是否需要担心这种事情? 就此而言,任何其他更高级别的语言?

如何使用C#确定SQL Server CE表中是否存在列?

遗留代码以这种方式执行: public bool isValidField(string tableName, string fieldName) { bool retVal; string tblQuery = string.Format(“SELECT {0} FROM {1}”, fieldName, tableName); checkConnection(); try { SqlCeCommand cmd = objCon.CreateCommand(); cmd.CommandText = tblQuery; object objvalid = cmd.ExecuteScalar(); retVal = (null != objvalid); } catch { retVal = false; } return retVal; } ……但我发现它并不总是奏效。 在调用该方法并获得false ,一些代码ALTERS表添加了一些列,但我得到: 列ID在规范中出现多次。 我在StackOverflow上找到了几个有前途的SQL语句: if exists(select […]

通过其pIDL识别Windows Shell特殊文件夹(即获取其CSIDL)(现在确定pIDL是否与C#相等)

我有一种情况,我想对一些Windows shell特殊文件夹(对应于CSIDL枚举中的值)执行特殊处理。(我的解决方案必须与WinXP兼容。)我遇到的问题是当我遇到IShellFolders时我沿着heirarchy工作,我找不到将IShellFolders与CSIDL相匹配的方法。 这是我目前的做法: 将所有CSIDL的静态一对一数据结构( csidlToFromFullPIdl )初始化为SHGetSpecialFolderLocation返回的pIDL。 foreach (CSIDL csidl in Enum.GetValues(typeof(CSIDL)) { IntPtr fullPIdl = IntPtr.Zero; int hResult = ShellApi.SHGetSpecialFolderLocation(IntPtr.Zero, csidl, ref fullPIdl); if (hResult != 0) Marshal.ThrowExceptionForHR(hResult); csidlToFromFullPIdl.Add(csidl, fullPIdl); } 使用Desktop IShellFolder启动heirarchy: int hResult = ShellApi.SHGetDesktopFolder(ref _shellFolder); hResult = ShellApi.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.CSIDL_DESKTOP, ref _fullPIdl); 像这样检索孩子: hResult = _shellFolder.EnumObjects(IntPtr.Zero, SHCONTF.SHCONTF_FOLDERS, out pEnum); // Then repeatedly call: […]

Windows Phone 7:如何在XAML中解析Bezier Path字符串?

我需要解析Bezier Path Strings,但显然.Net CF框架中的System.Windows.Media.Geometry版本没有Parse()方法,它可以在它的普通对应方法中使用。 但是,输入以下XAML确实有效,因此必须有一种方法解析Path Data String。 有关如何使用XAML外部的自定义字符串启动此解析的任何线索? 我当然也可以尝试使用正则表达式来编写我自己的解析器,但我不想自己处理它,因为框架显然能够实现它。 更新 当使用建议的XAMLReader时,当我将StrokeThickness设置为新创建的Path时,我得到一个奇怪的exception: path.StrokeThickness = strokeWidth; //ArgumentException ??? (strokeWidth = 6) 当我使用我的手动解析器更改代码路径以进行渲染时,一切正常。 我在这里错过了什么吗? 除解析器外没有任何变化。 手动生成数据: //”M {0} {1} Q {2} {3} {4} {5}” String regex_input = @”M (\d+) (\d+) Q (\d+) (\d+) (\d+) (\d+)”; Regex regex = new Regex(regex_input); Match match = regex.Match(pathData); int startx = int.Parse(match.Groups[1].Value); […]

从SQL Server数据库创建JSON结果

我有一个具有以下布局的SQL服务器 Table ( id int title varchar(40), start Date(), end Date(), allDay bool, username varchar(40) ); 我从这个博客中获得了以下代码,以便根据我想要使用的数据创建一个JSON对象,但是他的数据存储方式不同。 如何从数据库中提取相同的对象? 我猜我需要将文件设为.cshtml文件而不是.js文件并使用此文件: @{ var db = Database.Open(“events”); var selectQueryString = “SELECT * FROM events”; } @foreach(var row in db.Query(selectQueryString)){ } 但是,如何调整此代码以生成相同的JSON对象? 以下是博客的相关代码,我的尝试如下: public JsonResult GetEvents(double start, double end) { var userName = Session[“UserName”] as string; if(string.IsNullOrEmpty(userName)) { return […]

entity framework6:代码优先级联删除

所以这里有几个类似的问题,但我仍然有问题确定我在简化场景中缺少的是什么。 假设我有以下表格,巧妙地以自己的名字命名: ‘JohnsParentTable’ (Id, Description) ‘JohnsChildTable’ (Id, JohnsParentTableId, Description) 结果类看起来像这样 public class JohnsParentTable { public int Id { get; set; } public string Description { get; set; } public virtual ICollection JohnsChildTable { get; set; } public JohnsParentTable() { JohnsChildTable = new List(); } } internal class JohnsParentTableConfiguration : EntityTypeConfiguration { public JohnsParentTableConfiguration() { ToTable(“dbo.JohnsParentTable”); […]