小编Sal*_*rtz的帖子

将具有固定大小的数组的C ++结构编组到C#中

我有一个这样声明的C#结构:

public struct AdvertisementData {
    public byte SomeId;
    [MarshalAs(UnmanagedType.LPArray , SizeConst = 12)]
    public byte[] AnArray;
  }
Run Code Online (Sandbox Code Playgroud)

与C ++对应:

struct AdvertisementData {
  uint8_t SomeId;
  uint8_t AnArray[12];
};
Run Code Online (Sandbox Code Playgroud)

当我尝试将对上述结构的堆栈分配实例的引用从C ++发送到C#时,我得到:“ Byte []类型的结构字段不能编组为LPArray。” 知道我在做什么错吗?

c# arrays mono marshalling fixed-width

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

有没有办法以编程方式获取iOS中音频单元的所有参数?

AUParamInfo()似乎不存在于iOS7框架(CoreAudio,AudioUnit,AudioToolbox)中.我想知道如何获得单位的所有参数.也就是说,在不知道它是什么类型或子类型的情况下,因为如果不是,那么答案就是在音频单元参数参考中查找.

core-audio audiounit ios ios7

2
推荐指数
1
解决办法
1438
查看次数

缩放UIScrollView contentSize以适合内部可变高度UITableView的UIView

我有一个uiscrollview的uiview作为笔尖的子视图。然后,我将另一个uiview与uitableview一起加载为该另一个uiview的子视图(此视图内的其他元素)作为uiscrollview的子视图。

也就是说,UISCrollView-> UIView-> UITableView(以及UIView内部的其他一些视图)。

我需要执行以下操作:

一旦知道了tableview的最终高度(取决于单元格的数量和它们的高度),我就需要调整包含它的uiview的大小,并相应地调整包含scrollview的contentSize属性的大小。

但是我不知道tableview的最终大小在哪一点(因为它可以根据其单元格所容纳的文本量来动态更改大小),我也不知道tableview会比uiview超出多少(默认为320 x 460)。

我试过在viewdidload上将包含tableview的视图设置为900的高度,并将其设置为sizeToFit,希望当将tablecell添加到tableview时,它会缩小(假设在添加cell的情况下tableview的框架会适当缩放)。但这似乎不起作用。

有什么想法吗?谢谢!

iphone uitableview uiscrollview uiview ios

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

如何构建核心动画CATransform3D矩阵以动画同时转换和缩放

我想同时缩放和翻译CALayer,从一个CGrect(一个小的,从一个按钮)到另一个(一个更大的,居中的,一个视图).基本上,想法是用户触摸按钮,然后从按钮中,CALayer显示并翻译和缩放以最终在屏幕上居中.然后CALayer(通过另一个按钮)缩小回按钮的位置和大小.

我通过CATransform3D矩阵制作动画.但CALayer实际上是UIView的支持层(因为我还需要Responder功能).虽然单独应用我的比例或翻译变换工作正常.两者的连接(平移,后跟缩放)会偏移图层的位置,以便在缩小时不与按钮对齐.

我的猜测是,这是因为CALayer锚点默认位于其中心.变换首先应用平移,移动"大"CALayer以与其框架左上角的按钮对齐.然后,当进行缩放时,由于CALayer锚点位于中心,所有方向都向下缩小.此时,我的图层是按钮的大小(我想要的),但是位置是偏移的(导致所有点向图层中心缩小).

说得通?

所以我想弄清楚是否不是连接翻译+规模,我需要:

翻译

将锚点更改为左上角.

规模.

或者,如果我能够提出一些因子或常数来合并到平移矩阵的值,那么它将转换为位置偏移,后续缩放将依次偏移,然后最终位置将是对.

有什么想法吗?

core-animation matrix calayer ios

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

为什么我不能在带有GetProcAddress的DLL中调用C++静态类工厂方法?

我正在尝试使用以下标头加载一个假设的插件:

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{ 

  public:

    virtual ~DllClass(void);
    static DllClass* getPCFilter(); 
    virtual int Process(int a, int b);

  protected:

    DllClass();
};


#endif /* _DLL_H_ */
Run Code Online (Sandbox Code Playgroud)

我的主机代码:

HINSTANCE hinstDLL;
hinstDLL = LoadLibrary(L"PCFilter.dll");

if(hinstDLL)
{
    typedef DllClass*(*Factory)();
    Factory fun1;

  fun1 = (Factory)GetProcAddress(hinstDLL, "DllClass::getPCFilter");
Run Code Online (Sandbox Code Playgroud)

dll打开但GetProcAddress未找到静态工厂方法.我不应该这样做吗?

我已经尝试摆脱静态方法,而是在类声明之后,执行以下操作:

extern "C" DLLIMPORT void* getPCFilterInstance()
{
    return (void*)new DllClass();
}
Run Code Online (Sandbox Code Playgroud)

但是,在编译主机源时,链接器会抱怨:

In …
Run Code Online (Sandbox Code Playgroud)

c++ windows dll

0
推荐指数
1
解决办法
1784
查看次数