小编smw*_*dia的帖子

"Console","cmd.exe","shell"之间的区别?

我不太确定控制台(在"Windows控制台应用程序"),cmd.exe,shell之间的区别.

  • 我知道cmd.exe在运行时是一个独立的进程,是cmd.exe == shell吗?那么shell只是一个过程?
  • 是console == cmd.exe?
  • MSDN说ProcessStartInfo.UseShellExecute == True表示在启动进程时使用shell,是否意味着进程启动与运行cmd.exe一样,并从该命令提示符运行程序?这样做有什么意义?以这种方式启动的流程是否有自己的控制台?

提前致谢.

c# windows

9
推荐指数
1
解决办法
2284
查看次数

为什么我不能使用__declspec(dllexport)从COM DLL导出DllGetClassObject()?

我正在开发一个COM DLL并尝试使用__declspec(dllexport)导出DllGetClassObject()方法.

这里是我的报关表:

extern "C" HRESULT __declspec(dllexport) __stdcall DllGetClassObject(REFCLSID rclsid, 
                                                             REFIID riid, void** ppv)
Run Code Online (Sandbox Code Playgroud)

但我一直得到这个错误:

error C2375: 'DllGetClassObject' : redefinition; different linkage
Run Code Online (Sandbox Code Playgroud)

所以我尝试检查所有DllGetClassObject定义的出现.于是在ObjBase.h中找到了以下一个.

STDAPI  DllGetClassObject(__in REFCLSID rclsid, __in REFIID riid, __deref_out LPVOID FAR* ppv);
Run Code Online (Sandbox Code Playgroud)

事实证明,STDAPI是这样的:

#define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE
Run Code Online (Sandbox Code Playgroud)

换句话说,它是这样的:

#define STDAPI                  extern "C" HRESULT __stdcall
Run Code Online (Sandbox Code Playgroud)

根据MSDN:

要导出函数,如果指定了关键字,__ declspec(dllexport)关键字必须出现在calling-convention关键字的左侧.

但我之前提到的声明没有奏效.

那么COM DLL 必须def文件导出他们的方法吗?


更新1

我用不同的方法名称测试了我的声明,如下所示:

extern "C" HRESULT __declspec(dllexport) __stdcall f()
{
    return S_OK;
}
Run Code Online (Sandbox Code Playgroud)

并且此方法已成功导出.所以这些说明符可以一起使用.似乎Visual C++编译器将STDAPIextern"C"HRESULT …

c++ com name-decoration

9
推荐指数
1
解决办法
8511
查看次数

何时使用这么多种方法来创建一个类型的实例?

我知道这些方法来创建一个实例:

  • Activator.CreateInstance()
  • AppDomain.CreateInstance()
  • AppDomain.CreateInstanceAndUnwrap()

什么时候使用它们?他们有什么不同?什么是展开呢?打开什么?为什么其他两种方法也没有打开?

更新

目前,我有以下医学类比:

  • Activator.CreateInstance()=外部授精
  • AppDomain.CreateInstance()=自然怀孕/内部人工授精

关于Unwrap操作,我有一些模糊的感觉,但我不会发布它,直到它更清楚.

.net c#

9
推荐指数
2
解决办法
403
查看次数

为什么.NET Dictionary <TKey,TValue>是不可变的?

我声明了一个Dictionary类型对象,并尝试在其中添加一些项目.但我甚至不能修改项目的价值.密钥不应该是可修改的,但为什么不是值?谢谢.

    Dictionary<string, string> dict = new Dictionary<string, string>();
    dict.Add("1", "bob");
    dict.Add("2", "jack");
    dict.Add("3", "wtf");
    foreach (string key in dict.Keys)
    {
        dict[key] = "changed"; //System.InvalidOperationException: Collection was modified
    }
Run Code Online (Sandbox Code Playgroud)

.net c#

9
推荐指数
3
解决办法
4299
查看次数

当我们以相同的代价获得全局变量时,静态局部变量的用途是什么?

在C中,当外部变量以相同的成本服务于其目的时,静态存储类的用途是什么.两者都占用了可执行文件数据段中的存储空间.

我有更好的外部变量范围.如果我希望外部变量的范围是特定文件我不要声明这个变量else where.i看到很多灵活性与全局变量静态局部变量

如果我们有变量的地址,我们可以引用函数外部的局部静态变量.本地静态变量的存储将在数据段中不在函数的堆栈框架中.所以静态存储类带来的独特特性表.

我只是想知道静态是否有任何我不知道的微妙目的.

c static extern storage-class-specifier

9
推荐指数
2
解决办法
3万
查看次数

如何解释这个Java泛型类型定义?

下面是netty 4.0.24框架中的一些代码片段.解释B类型参数有点令人困惑.

public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

java netty

9
推荐指数
1
解决办法
162
查看次数

CollectionEditor产生"对象与目标类型不匹配".for System.Drawing.Point

我有一个自定义控件具有类型的属性Collection<System.Drawing.Point>.当我使用CollectionEditor编辑此属性,则CollectionEditor窗口显示"Object does not match target type.""X""Y"性能.但如果我System.Drawing.PointF改用它,那就没有失败.

谁能解释为什么会出现这种差异?

c# collectioneditor

8
推荐指数
1
解决办法
1792
查看次数

"类型"在物理上意味着什么?

我听过很多关于" 类型系统","强类型语言"等等.目前我正在研究一些.NET COM互操作问题,它解决了"编组"问题.而AFAIK,marshaling则是关于.NET类型和COM类型之间的转换.

在诸如编程语言的许多场景中,当谈论类型时,我们关注逻辑意义.

现在我想知道:"类型"在物理上意味着什么?在某种程度上,我们可以观看和触摸.

我目前的理解是"类型"只不过是计算实体的内存表示.

非常感谢您的回复.

添加-1

来自MSDN的一些引用:

在托管/非托管边界上编组简单,易于浏览的结构首先要求定义每个本机结构的托管版本.这些结构可以有任何合法的名称; 除了数据布局之外,两个结构的本机版本和托管版本之间没有任何关系.因此,托管版本包含与本机版本大小相同且顺序相同的字段至关重要.(没有机制可以确保结构的托管版本和本机版本是等效的,因此不兼容性在运行时才会变得明显.程序员有责任确保两个结构具有相同的数据布局.)

因此,就Marshaling而言,布局至关重要.

.net language-agnostic types strong-typing

8
推荐指数
1
解决办法
712
查看次数

为什么我们需要"这个指针调整器thunk"?

我从这里读到了调整器thunk .这是一些引用:

现在,只有一个QueryInterface方法,但有两个条目,每个vtable一个.请记住,vtable中的每个函数都接收相应的接口指针作为其"this"参数.这对于QueryInterface(1)来说很好; 它的接口指针与对象的接口指针相同.但这对于QueryInterface(2)来说是个坏消息,因为它的接口指针是q,而不是p.

这是调节器雷声进来的地方.

我想知道为什么" vtable中的每个函数都接收相应的接口指针作为其"this"参数 "?它是接口方法用于在对象实例中定位数据成员的唯一线索(基址)吗?

更新

这是我最新的理解:

实际上,我的问题不是关于这个参数的目的,而是关于为什么我们必须使用相应的接口指针作为this参数.对不起我的含糊不清.

除了使用界面指针作为对象布局中的定位器/立足点.只要您是组件的实现者,当然还有其他方法可以做到这一点.

但对于我们组件的客户来说情况并非如此.

当组件以COM方式构建时,组件的客户端对组件的内部结构一无所知.客户端只能占用接口指针,这是将作为this参数传递给接口方法的指针.在这种期望下,编译器别无选择,只能根据这个特定的this指针生成接口方法的代码.

因此上述推理导致了以下结果:

必须确保vtable中的每个函数必须将相应的接口指针作为其" this "参数接收.

在"this pointer adjustor thunk"的情况下,单个QueryInterface()方法存在2个不同的条目,换句话说,可以使用2个不同的接口指针来调用QueryInterface()方法,但编译器只生成1个副本QueryInterface()方法.因此,如果编译器选择其中一个接口作为this指针,我们需要将另一个调整为所选择的接口.这就是这个调节器thunk诞生的原因.

BTW-1,如果编译器可以生成2个不同的QueryInterface()方法实例呢?每一个都基于相应的接口指针.这不需要调整器thunk,但是需要更多空间来存储额外但相似的代码.

BTW-2:似乎有时问题从实施者的角度来看缺乏合理的解释,但可以从用户的指针视角更好地理解.

c++ com

8
推荐指数
1
解决办法
2774
查看次数

是否有任何最佳实践来准备基于文本的分类功能?

我们向客户提供了许多反馈和问题报告.它们是纯文本.我们正在尝试为这些文档构建自动分类器,以便将来的反馈/问题可以自动路由到正确的支持团队.除了文本本身,我认为我们应该将客户档案,案例提交区域等内容纳入分类器.我认为这可以为分类器提供更多线索,以便做出更好的预测.

目前,为培训选择的所有功能都基于文本内容.如何包含上述元功能?

(顺便说一下,我是新手.如果这个问题很简单,那么请原谅.)

添加1

我目前的方法是首先对原始文本(包括标题和正文)进行一些典型的预处理,例如删除停用词,POS标记和提取重要单词.然后我将标题和正文转换为单词列表,并以稀疏格式存储它们,如下所示:

实例1:word1:word1计数,word2:word2计数,....

实例2:wordX:word1计数,wordY:word2计数,....

对于其他非文本功能,我打算将它们添加为单词列之后的新列.所以最终的例子看起来像:

实例1:word1:word1计数,...,特征X:值,特征Y:值

nlp machine-learning text-mining

8
推荐指数
1
解决办法
682
查看次数