小编EMo*_*Mon的帖子

C#到VB6 COM事件("对象或类不支持事件集")

用这个真的把我的头发拉出来......

我有一个C#项目,其接口定义为:

/* Externally Accessible API */
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISerial
{
    [DispId(1)]
    bool Startup();

    [DispId(2)]
    bool Shutdown();

    [DispId(3)]
    bool UserInput_FloorButton(int floor_number);

    [DispId(4)]
    bool Initialize();
}

/* Externally Accesssible Event API */
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISerialEvent
{
    [DispId(5)]
    void DataEvent();
}

[ComSourceInterfaces(typeof(ISerialEvent), typeof(ISerial))]
[ClassInterface(ClassInterfaceType.None)]
public class SerialIface : ISerial
{
    public delegate void DataEvent();
    public event DataEvent dEvent;

    public bool Initialize()
    {
        //testing the event callback
        if (dEvent != null)
        {
            dEvent();
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

VB6代码如下:

Private WithEvents objSerial …
Run Code Online (Sandbox Code Playgroud)

c# vb6 events delegates interop

5
推荐指数
2
解决办法
7077
查看次数

GtkScrolledWindow - 如何始终显示覆盖滚动条

我正在使用 GTK3 应用程序,该应用程序需要始终可见、始终活动的滚动条和可见的步进器。我已经能够用 css 实现这一点:

scrollbar.hover,
scrollbar {
    margin-left: 2px;
    -GtkScrollbar-has-backward-stepper: 1;
    -GtkScrollbar-has-forward-stepper: 1;
}

scrollbar trough {
    min-width: 30px;
}

scrollbar button {
    min-height: 30px;
    min-width: 30px;
}

scrollbar.right slider {
    min-height: 70px;
    min-width: 30px;
}
Run Code Online (Sandbox Code Playgroud)

连同这段代码:

GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); //never horizontal, always vertical
g_object_set(sw, "overlay-scrolling", FALSE, NULL);
Run Code Online (Sandbox Code Playgroud)

然而,设置overlay-scrollingFALSE意味着滚动条位于 GtkScrolledWindow 的一侧,而不是在其中。这会导致应用程序(从早期版本的 gtk 移植的遗留应用程序)出现布局问题。

但是,如果我启用覆盖滚动,则滚动条会在几秒钟后隐藏,而不会向 GtkScolledWindow 发送运动事件。

我一直在使用 GtkInspector 来搞乱一切,尝试禁用隐藏滚动条,但没有成功。

一个黑客方法是设置一个计时器,不断向窗口发送运动事件,以防止滚动条隐藏……但这非常难看。

关于在哪里找到禁用覆盖滚动条隐藏的秘密武器的任何建议?

css c gtk3

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

无论类型如何,如何从模板化类的方法返回std :: string?

我很难解决我认为应该做的一件简单的事情。我有一个模板化的类,看起来像这样(有其他代码,以加载值,等等)。我关心的类型是char,int,bool和std :: string。

template <typename T>
class MyVector
{
public:
    std::string get()
    {
        return m_vector[m_current_index];                   // 1
        return std::to_string(m_vector[m_current_index]);   // 2

                                                            // 3
        if constexpr (!std::is_same_v<T, std::string>) {
            return std::to_string(m_vector[m_current_index]);
        }
        return m_vector[m_current_index];
    }

private:
    std::vector<T> m_vector;
    int m_current_index{-1};
};
Run Code Online (Sandbox Code Playgroud)

对于不是std :: string的任何类型名称T,上面的选项(1)都会失败。

选项(2)适用于 std :: string 之外的任何类型名T

选项(3)似乎在编译时未得到实际处理(与选项(1)的情况相同,发生了错误)

c++ string templates std

3
推荐指数
1
解决办法
48
查看次数

标签 统计

c ×1

c# ×1

c++ ×1

css ×1

delegates ×1

events ×1

gtk3 ×1

interop ×1

std ×1

string ×1

templates ×1

vb6 ×1