Действительно ли возможно получить доступ к 64-разрядному dll из 32-разрядного приложения?

Я хотел бы рассказать вам очень простой способ обновить использование навигации.

Ниже приведен пример вашего файла index.js

    import React, { Component } from 'react';
    import { StyleSheet, View } from 'react-native';

    import { Main } from './navigation/Main';

    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: '#fff',
      },
    });

    export class App extends Component {
      render() {
        return (
          <View style={ styles.container }>
            <Main />
          </View>
        );
      }
    }

Тогда вот ваш Main.js , который является вашим классом навигации. Вы можете объявить весь свой экран здесь.

    import {
      createStackNavigator,
      createAppContainer,
    } from 'react-navigation';

    import { FirstScreen } from '../screens/FirstScreen';
    import { SecondScreen } from '../screens/SecondScreen';

    const RootStack = createStackNavigator({
      FirstScreen: {
        screen: FirstScreen,
        key: 'FirstScreen',
        navigationOptions: {
          gesturesEnabled: false,
        },
      },
      SecondScreen: {
        screen: SecondScreen,
        key: 'SecondScreen',
        navigationOptions: {
          gesturesEnabled: false,
        },
      },
    });

    export const Main = createAppContainer(RootStack);


Теперь вы можете просто перемещаться с одного экрана на другой.

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View,
  TouchableOpacity,
} from 'react-native';

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

class FirstScreen extends Component {
  onGetStarted() {
    const { navigate } = this.props.navigation;

    navigate('SecondScreen');
  }

  render() {
    return (
      <View style={ styles.container }>
        <TouchableOpacity
          style={ styles.welcome }
          onPress={ () => this.onGetStarted() }
        >
          <Text>
            Welcome to React Native!
          </Text>
        </TouchableOpacity>
        <Text style={ styles.instructions }>This is screen 1</Text>
      </View>
    );
  }
}

export { FirstScreen };
13
задан smartins 4 December 2008 в 11:00
поделиться

3 ответа

Нет. Необходимо будет скомпилировать две версии: 64-разрядный и 32-разрядный.

6
ответ дан 1 December 2019 в 22:08
поделиться

Пока 64-разрядный DLL загружается отдельным 64-разрядным процессом, и вся коммуникация между 32-разрядным процессом и 64-разрядным DLL с помощью свободно связанных подобных IPC механизмов, что ОС может Маршалл, затем да можно сделать это.

Я сделал что-то подобное. Для 32-разрядного приложения было нужно пользовательское дополнение Спулера печати, реализованное в DLL. Приложение и дополнение спулера передаются с помощью механизмов IPC (необычный способ сказать временные файлы, в этом случае).

В 64-разрядных системах все о 32-разрядном приложении хорошо работало за исключением того, что Спулер печати отказался загружать дополнение DLL, потому что Спулер печати был, конечно, 64-разрядным процессом.

Решение было так же просто как восстановление только дополнения Спулера в 64-разрядном. Никакая потребность изменить все 32-разрядное приложение.

9
ответ дан 1 December 2019 в 22:08
поделиться

Нет, но Вы смогли обходить то использование COM. При выполнении dll в COM-объекте, который работает как автономный процесс, и общайтесь с marshallable интерфейсами (например: совместимые с автоматизацией интерфейсы), это должно работать. Не всегда выполнимо, в зависимости от того, что делает dll и как обширный интеграция и звонит, поверхности, но это - опция, которая должна смочь сделать тот сценарий возможным.

2
ответ дан 1 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: