小编Rod*_*ddy的帖子

是否有为C++ Builder 2009更新C++ Builder应用程序的指南?

我从BCB5开始使用C++ Builder开发了一系列Win32 VCL应用程序,并希望将它们移植到ECB2009或其现在所称的任何内容.

我的一些应用程序使用旧的TNT/TMS unicode组件,因此我在整个代码中都有很好的AnsiStrings和WideStrings组合.新版本引入了UnicodeString,以及一些改变c_str等函数行为方式的#defines.

我希望以尽可能向后兼容的方式修改我的代码,以便在必要时仍然可以在BCB2007上编译和运行相同的代码库(以非unicode方式).

特别关注的领域是:

  • 将字符串传递给Win32 API函数或从Win32 API函数传递
  • 与TXMLDocument互操作
  • 用于RS232通信等的'原始'字符串

我正在寻找可以应用以简化迁移的指南,同时尽可能保持向后兼容性,而不是刀叉式更改.

如果没有这样的指导方针,也许我们可以在这里制定一些指南?

unicode vcl c++builder

6
推荐指数
1
解决办法
1435
查看次数

构建相同C/C++应用程序变体的最佳方法是什么

我有三个密切相关的应用程序,它们是从相同的源代码构建的 - 比方说APP_A,APP_B和APP_C.APP_C是APP_B的超集,APP_B又是APP_A的超集.

到目前为止,我一直在使用预处理器定义来指定正在构建的应用程序,它就像这样工作.

// File: app_defines.h
#define APP_A 0
#define APP_B 1
#define APP_C 2
Run Code Online (Sandbox Code Playgroud)

然后我的IDE构建选项指定(例如)

#define APPLICATION APP_B
Run Code Online (Sandbox Code Playgroud)

...在源代码中,我会有类似的东西

#include "app_defines.h"

#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif
Run Code Online (Sandbox Code Playgroud)

然而,我今天早上在脚上射击并且浪费了很多时间,只需从一个文件中省略#include"app_defines.h"的行.一切编译得很好,但应用程序在启动时与AVs崩溃.

我想知道更好的处理方法是什么.以前,这通常是我认为#define可以使用的少数几次之一(无论如何都是在C++中),但我仍然很糟糕,并且编译器没有保护我.

c++ configuration-management c-preprocessor software-product-lines

6
推荐指数
3
解决办法
929
查看次数

在Win32中开始使用SOAP for Delphi

我有一个使用RemObjects SDK在Delphi/C++ Builder中构建的服务器进程声称支持SOAP请求.

测试SOAP支持的最快捷,最简单的方法是什么?我不想学习新语言/安装新的IDE /花费超过一天...

为了澄清这一点,我已经使用RO本机协议愉快地连接到服务器,并启用了SOAP,但我想测试不基于RO SDK的系统如何使用它.对客户端和服务器使用RO SOAP无法实现此目的......

delphi soap remobjects

6
推荐指数
1
解决办法
5598
查看次数

C++是否允许函数的默认返回类型?

在C中,以下恐怖是有效的:

myFunc()
{
  return 42;  // return type defaults to int.
}
Run Code Online (Sandbox Code Playgroud)

但是,在C++中呢?无论如何我都找不到它的参考...

我的编译器(Codegear C++ Builder 2007)目前在没有警告的情况下接受它,但我有评论说这 C++中的错误.

c c++

6
推荐指数
3
解决办法
4727
查看次数

以线程安全的方式返回指针

假设我有一个线程安全的Things集合(称之为ThingList),我想添加以下函数.

Thing * ThingList::findByName(string name)
{
  return &item[name]; // or something similar..
}
Run Code Online (Sandbox Code Playgroud)

但通过这样做,我已将线程安全的责任委托给调用代码,该代码必须执行以下操作:

try 
{
  list.lock(); // NEEDED FOR THREAD SAFETY
  Thing *foo = list.findByName("wibble");
  foo->Bar = 123;
  list.unlock();  
}
catch (...) 
{
  list.unlock();
  throw;
} 
Run Code Online (Sandbox Code Playgroud)

显然,RAII锁定/解锁对象会简化/删除try/catch/unlocks,但是调用者仍然很容易忘记.

我看过几个替代方案:

  • 除非你需要修改Thing,否则返回值而不是指针 - 罚款
  • 添加功能ThingList::setItemBar(string name, int value)- 很好,但这些往往会增殖
  • 返回一个指针式对象,它在创建时锁定列表,并在销毁时再次解锁.不确定这是好/坏的做法......

处理这个问题的正确方法是什么?

c++ pointers thread-safety

6
推荐指数
1
解决办法
1184
查看次数

将Windows Phone 8应用程序部署到模拟器时VS2015崩溃

VS2015崩溃,在使用Windows Phone模拟器运行应用程序时,我尝试使用Phone 8.1和Windows 10 Mobile Emulator.模拟器成功启动但VS无法部署应用程序,结束崩溃.

错误应用程序名称:devenv.exe,版本:14.0.23107.0,时间戳:0x559b7ead错误模块名称:SirepClient.dll,版本:0.0.0.0,时间戳:0x559f6024异常代码:0xc0000005错误偏移量:0x0002c376错误进程id:0x3770错误应用程序启动时间:0x01d123ea21bcb890错误应用程序路径:C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe错误模块路径:C:\ Program Files(x86)\ Common Files\Microsoft Shared\Windows电话Sirep\8.1\SirepClient.dll报告ID:d583c604-2aed-41b5-ac84-8223f613cef0错误包全名:错误包相关应用程序ID:


应用程序:devenv.exe Framework版本:v4.0.30319描述:由于未处理的异常,进程已终止.异常信息:位于Microsoft.SmartDevice.Connectivity.Vrapper.ConnectivityWrapper12.CreateConnectedDeviceInstance(Microsoft.SmartDevice.Connectivity)的Microsoft.SvualualStudio.DeviceConnectivity.Interop.ConManServerClass.ConnectDevice()中的Microsoft.VisualStudio.DeviceConnectivity.Interop.ConManServerClass.ConnectDevice()处的System.AccessViolationException. .Device)Microsoft.VisualStudio.ComjectProystem上的Microsoft.SvisualStudio.CommonProject.SmartDevice.Deploy.DeployTask.Execute()中的Microsoft.SmartDevice.MultiTargeting.Connectivity.ConnectableDevice.Connect(Boolean).SilverlightMobileVSProjectFlavorCfg.Deploy(System.Object) )System.Threading.ExecutionContext.Run上的System.Threading.QuereadingUserWorkItemCallback.WaitCallback_Context(System.Object)处于System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)处. System.Threading.QueueUserWork上的System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)在System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()的System.Threading.ThreadPoolWorkQueue.Dispatch()上的ItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()

windows-phone-8 visual-studio-2015

6
推荐指数
1
解决办法
956
查看次数

打字稿mixin中的抽象方法

我想要一个Typescript Mixin有一个由mixed-into类实现的抽象方法.像这样的东西.

class MyBase { 
}

type Constructor<T = {}> = new (...args: any[]) => T;

function Mixin<TBase extends Constructor<MyBase>>(Base: TBase) {
  return class extends Base {

    baseFunc(s: string) {};

    doA()
    {
        this.baseFunc("A");
    }
  }
};

class Foo extends Mixin(MyBase) {
    constructor()
    {
      super();
    }

    baseFunc(s: string)
    {
      document.write("Foo "+ s +"...   ")            
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,这是有效的,但我真的想让mixin中的baseFunc成为抽象的,以确保它在Foo中实现.有没有办法做到这一点,因为abstract baseFunc(s:string);我必须有一个抽象类,这是不允许mixins ...

abstract mixins typescript

6
推荐指数
1
解决办法
1264
查看次数

rails assets:预编译系统中未检测到Yarn可执行文件

我正在使用基于Ubunt 17.04的Linux 18.当我跑步时,rails assets:precompile我得到以下消息Yarn executable was not detected in the system

当我按照本帖子网页上的安装说明进行操作时,我成功安装了Yarn,但rails一直给我错误

我注意到node.js有Linux Mint的系统包到版本17.2,我试图对Yarn页面执行所有指令并手动安装node.js已安装在我的系统中.

该消息并不能解释问题.如果我运行yarn --help它是有效的,我的yarn --version0.22

这是我的Linux Mint系统

DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=18
DISTRIB_CODENAME=sarah
DISTRIB_DESCRIPTION="Linux Mint 18 Sarah"
NAME="Ubuntu"
VERSION="16.04 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
UBUNTU_CODENAME=xenial
cat: /etc/upstream-release: Is a directory
Run Code Online (Sandbox Code Playgroud)

更新

这是我$PATH在终端中回显的输出/opt/yarn-0.22/bin,但当我走到那条路径时,没有文件夹,/opt/yarn-0.22所以我需要了解它的安装位置并正确配置PATH SETUP

Path Setup

If you …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu ruby-on-rails yarnpkg

6
推荐指数
1
解决办法
1万
查看次数

如何将Delphi TPageControl"tab index"转换为"page index"?

我正在使用TPageControl,其中某些页面不可见.

这打破了TabIndex和ActivePageIndex属性的正常1:1映射.

在大多数地方,我可以使用ActivePageIndex(或ActivePage本身)来获取当前页面,但我想要一个动态工具提示提示,这需要我确定哪个页面与特定选项卡索引相关联.

如果我调用pageControl.IndexOfTabAt(X,Y),我会得到一个Tab Index,但我不能直接使用它作为Pages []数组的索引,因为某些页面选项卡不可见.

我可以明确地遍历页面,忽略可见的页面,但感觉VCL中应该有一些东西已经为我做了这个......?

delphi tpagecontrol

5
推荐指数
1
解决办法
3499
查看次数

Typescript 类型保护和粗箭头功能

这不应该正确编译吗?我"Property 'hello' does not exist on type 'object'.在突出显示的行中收到错误“。

我可以g.hello毫无问题地访问胖箭头功能之外。

class Test {
    constructor() {
    }
    hello() : string {
        return "Hello";
    }
}

let g : object;

if (g instanceof Test) {
    () => {
        g.hello();    ////// ERROR HERE /////
    };
}
Run Code Online (Sandbox Code Playgroud)

typescript typeguards

5
推荐指数
1
解决办法
294
查看次数